1_Eureka_服务注册_服务提供者_服务消费

1、服务注册中心的搭建

1.1、项目名称为one-eurekas-erver

1…1.2、pom.xml依赖

   <!--eureka 服务端,服务注册中心-->
      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-eureka-server</artifactId>
      </dependency>
    

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>com.eureka.server.first</groupId>
   <artifactId>one-eurekas-erver</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>one-eurekas-erver</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.5.3.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
      <spring-cloud.version>Dalston.RELEASE</spring-cloud.version>
   </properties>

   <dependencies>
      <!--eureka 服务端,服务注册中心-->
      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-eureka-server</artifactId>
      </dependency>
    
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-thymeleaf</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>



      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-eureka-server</artifactId>
      </dependency>


   </dependencies>

   <dependencyManagement>
      <dependencies>
         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
         </dependency>
      </dependencies>
   </dependencyManagement>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>


</project>

1.2、注解启动服务注册中心为其他的应用提供服务

**@EnableEurekaServer**开启Eureka服务注册中心的支持,用来供给其他应用进行对话


@EnableEurekaServer  //开启Eureka服务注册中心的支持,用来供给其他应用进行对话
@SpringBootApplication
public class OneEurekasErverApplication {

   public static void main(String[] args) {
      SpringApplication.run(OneEurekasErverApplication.class, args);
   }
}


1.3、开始配置和服务注册中心


spring.application.name=one-eurekas-erver


#默认设置下,这个服务注册中心会将自己作为客户端,所以需要禁用它的客户端注册行为 下面5个
# 服务注册中心 端口
server.port=1111
#主机
eureka.instance.hostname=localhost
#这个为注册中心,false代表不向注册中心注册自己 ##直接启动之后会发现这个是空的,说明注册中心没有注册任何服务
eureka.client.register-with-eureka=false 
#注册中心的职责就是维护服务实例,并不需要它去检索服务,所以将它关闭
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

1.4、启动这个服务注册中心

TFrUyIcwZi6Bngaj

2、搭建一个简单的服务提供者

2.1、项目名称为 eureka-server-ha

2.1.1、pom.xml依赖为


  <!--eureka 客户端,处理服务的注册和发现-->
      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-eurek</artifactId>
      </dependency>

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>com.didispace</groupId>
   <artifactId>eureka-server-ha</artifactId>
   <version>1.0.0</version>
   <packaging>jar</packaging>

   <name>eureka-server-ha</name>
   <description>Spring Cloud In Action</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.3.7.RELEASE</version>
      <relativePath/>
   </parent>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <java.version>1.8</java.version>
   </properties>
   

   <dependencies>
      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-eureka-server</artifactId>
      </dependency>
   </dependencies>

  <!--eureka 客户端,处理服务的注册和发现-->
      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-eurek</artifactId>
      </dependency>

   <dependencyManagement>
      <dependencies>
         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Brixton.SR5</version>
            <type>pom</type>
            <scope>import</scope>
         </dependency>
      </dependencies>
   </dependencyManagement>
   
   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>

</project>

2.2、注解启动服务发现

@EnableDiscoveryClient /支持服务发现

//支持服务发现
@EnableDiscoveryClient
@SpringBootApplication
public class Application {

   public static void main(String[] args) {
      new SpringApplicationBuilder(Application.class).web(true).run(args);
   }

}

2.3、自动化配置DiscoveryClient发现服务后,提供一个http请求接口,作为服务提供者提供的接口




@RestController
public class HomeController {


    @Autowired
    private DiscoveryClient client;

    @RequestMapping(value = "hello",method = RequestMethod.GET)
    public  ServiceInstance index(){
        ServiceInstance serviceInstance = client.getLocalServiceInstance();
        System.out.println(
                "host:"+serviceInstance.getHost()+"/n " +
                "service_id :"+serviceInstance.getServiceId());
        return serviceInstance;
    }

}

2.4、指定提供的服务命名、指定服务注册中心


spring.application.name=hello-service
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
server.port=8080

2.5、在已经启动了服务注册中心之后可启动这个服务提供者

2.5.1、http://localhost:1111 观察服务注册中心浏览器状态,发现有服务注册进来的

rRs3Y4bmK8qhu0B

2.5.2、http://localhost:8080/hello ,查看服务提供者控制台

qzMFrIwvyU3ohxVi

3、高可用注册中心

解释:讲自己作为服务向其他服务注册中心注册自己,这样就会形成一组互相注册的注册中心,用来实心服务清单的互相同步

3.1、修改host文件

	127.0.0.1 peer1
	127.0.0.1 peer2

3.2、创建配置文件application-peer1.properties

spring.application.name=one-eurekas-erver
server.port=1111
eureka.instance.hostname=peer1

eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka/

3.3、创建配置文件 application-peer2.properties


spring.application.name=one-eurekas-erver
server.port=1112
eureka.instance.hostname=peer2

eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/

3.4、分别利用这2两个配置文件进行启动(复制项目,修改spring.profiles.active 利用idea启动)

0bVzmve2YuFJOZpy

imF5SWM2h3Ubkneq

3.5、启动上面的(项目2,服务提供者hello-service)

spring.application.name=hello-service
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
server.port=8080

3.5.1、即使这个服务提供者所指定的注册中心只有一个,但是因为上面的配置的高可用,其实二者共享了

b1l5YJ2WRI7Zxz4a

zyi0WCdtVbXp9mAe

3.5.2、现在为这个服务提供者指定上面的两个注册中心 ,这样即使一个注册中心挂掉了,另外的一个注册中心还能够继续提供服务

spring.application.name=hello-service
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2:1111/eureka/

server.port=8080

4、服务发现和消费

解释:根据上面的操作,我们其实已经有了服务注册中心和服务提供者,下面就是开始构建一个服务消费者,它主要完成两个目标,发现服务和消费服务,Eureka为客户端可以发现服务,Ribbon则作为消费服务,它同时也作为辅助均衡器

4.1、服务提供者复制一个出来,并设置端口设置为8081 ,这样就有两个端口了8080,8081

U8MBfy6phqwZ7eA

AHSZ2YsNxLXQ9dn

4.2、创建服务消费者

4.2.1、pom.xml为

     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-ribbon</artifactId>
      </dependency>


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>com.didispace</groupId>
   <artifactId>ribbon-consumer</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>ribbon-consumer</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.3.7.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
   </properties>

   <dependencies>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>

      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-eureka</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-ribbon</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-actuator</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-hystrix</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-netflix-hystrix-amqp</artifactId>
      </dependency>
   </dependencies>

   <dependencyManagement>
      <dependencies>
         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Brixton.SR5</version>
            <type>pom</type>
            <scope>import</scope>
         </dependency>
      </dependencies>
   </dependencyManagement>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>

</project>

5.2.2、注解服务发现和@LoadBalanced客户端负载均衡,这样就可以随机的访问8080 和8081了

@EnableDiscoveryClient 服务发现

@LoadBalanced 开启客户端负载均衡


@EnableDiscoveryClient
@SpringBootApplication
public class ConsumerApplication {

   //开启客户端负载均衡
   @Bean
   @LoadBalanced
   RestTemplate restTemplate() {
      return new RestTemplate();
   }
   public static void main(String[] args) {
      SpringApplication.run(ConsumerApplication.class, args);
   }

}

5.2.3、对服务提供者提供的接口进行调用http://HELLO-SERVICE/hello/

解释:HELLO-SERVICE 为服务提供者应用名称,hello 为提供者的url地址

@RestController
public class ConsumerController {


    @Autowired
    RestTemplate restTemplate;

    @RequestMapping(value = "/ribbon-consumer", method = RequestMethod.GET)
    public String helloConsumer() {
        return restTemplate.getForEntity("http://HELLO-SERVICE/hello/",String.class).getBody();
    }
}

5.2.4、指定服服务消费名称、配置端口9000,指定注册中心,一个注册中心挂掉,还能用另外的一个


spring.application.name=ribbon-consumer
server.port=9000

eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2:1112/eureka/,

5.2.5、启动这个服务消费者,观察1111和1112注册中心

5.3、3、浏览器访问这个服务消费者提供发http接口 http://localhost:9000/ribbon-consumer

解释 可以观察到,访问的时候,调用的服务提供者是随机被我们访问的,8080和8081 是随机出现的,这就是负载均衡喽

HealerJean-代码下载





感兴趣的,欢迎添加博主微信,

哈,博主很乐意和各路好友交流,如果满意,请打赏博主任意金额,感兴趣的在微信转账的时候,备注您的微信或者其他联系方式。添加博主微信哦。


请下方留言吧。可与博主自由讨论哦

微信 微信公众号 支付宝
微信 微信公众号 支付宝
posted @ 2018-11-29 11:54  HealerJean  阅读(169)  评论(0编辑  收藏  举报