Eureka的搭建

Eureka需要搭建服务注册中心,服务的提供者和服务的消费者,服务的提供者把服务注册到Eureka上,服务的消费者从Eureka获取调用的服务地址,使得服务提供者和服务消费者的解耦,一般服务的提供者也同时是服务的消费者。

一 搭建注册中心(Eureka)

   1 创建一个spring boot工程,命名为eureka-server,并在pom.xml中引入必要的依赖内容。

      
        org.springframework.boot
        spring-boot-starter-parent
        1.3.7.RELEASE
        
    

    

     
      org.springframework.cloud
      spring-cloud-starter-eureka-server
   

    


       
           
                org.springframework.cloud
                spring-cloud-dependencies
                Brixton.SR5
                pom
                import
           

       

   

 

2 在main方法上面添加@EnableEurekaServer表示启动一个注册中心提供给其他应用

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

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

}


3 配置文件 application.properties,也可以用yml的文件 

eureka.client.register-with-eureka   因为该应用就是注册中心,所以为false,表示不向注册中心注册自己

eureka.client.fetch-registry  由于注册中心的职责就是维护服务实例,它不需要检索服务,所以也为false,完成后启动应用,访问

http://127.0.0.1:1111/

application.properties的配置如下:

server.port=1111
spring.application.name=eureka-server
eureka.instance.hostname=peer1
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/

 

 结果如下图 Eureka的搭建_第1张图片

 

二  创建服务的提供者

 1  创建一个spring boot工程,命名为hello,并在pom.xml中引入必要的依赖内容。

 


        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
        
    
      org.springframework.cloud
      spring-cloud-starter-eureka-server
   

 
 

2 Controller编写hello的业务代码,在main方法添加@EnableEurekaClient 注解,表示激活Eureka中的DiscoveryClient实现

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    private static final Logger logger = LoggerFactory.getLogger(HelloController.class);

  @RequestMapping("/hello")

      public String  index( )   {
          return "Hello  World";
     }

}

 

3 配置文件 application.yml  ,defaultZone注册中心的地址,name表示服务的名字,启动hello服务,如下图,在Instances currently registered with Eureka可以看到服务注册的信息。

server:
  port: 8082
eureka:
  client:
    serviceUrl: #注册中心的注册地址
      defaultZone: http://peer1:1111/eureka/
spring:
  application:
    name: hello-service

 

Eureka的搭建_第2张图片

 

三 创建服务的消费者

1 创建一个spring boot工程,命名为hello-consumer,并在pom.xml中引入必要的依赖内容。

 
        
            org.springframework.cloud
            spring-cloud-starter-ribbon
        

       
            org.springframework.boot
            spring-boot-starter-web
        

   
      org.springframework.cloud
      spring-cloud-starter-eureka
   

2 添加RestTemplate类,可以负载均衡的调用服务,@LoadBalanced注解开启客户端的负载均衡,可以看到地址是服务名称,不在是一个具体的ip或者域名的地址,实现客户端和服务端的调用地址的解耦

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@EnableDiscoveryClient
@SpringBootApplication
public class HelloConsumerApplication {

    
    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
         
         
        return new RestTemplate();
    }
    
    public static void main(String[] args) {
        SpringApplication.run(HelloConsumerApplication.class, args);
    }

}


@RestController
public class HelloConsumerController {
    
      @Autowired
      RestTemplate restTemplate;
      
      @RequestMapping("/ribbon-newConsumer")
      public String  helloNewConsumer( )   {
           String ss=restTemplate.getForEntity("http://hello-service/hello", String.class).getBody();
          return ss;
     }

 }

3 配置文件,启动消费者应用,可以看到如下图,应用多了一个HELLO-CONSUMER

server:
  port: 9000
eureka:
  client:
    serviceUrl: #注册中心的注册地址
      defaultZone: http://peer1:1111/eureka/
spring:
  application:
    name: hello-consumer

Eureka的搭建_第3张图片

 

访问http://127.0.0.1:9000/ribbon-newConsumer 结果如下图

Eureka的搭建_第4张图片

 

四:把单台的注册中心做成两台高可用模式的注册中心

 1 修改配置,第一台配置如下,serviceUrl指向peer2,因为高可用的服务注册中心就是将自己作为服务向其他服务注册中心注册自己,这样就可以形成一组互相的服务注册中心,所以eureka.client.register-with-eureka,eureka.client.fetch-registry的值都是true

server.port=1111
spring.application.name=eureka-server
eureka.instance.hostname=peer1
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.serviceUrl.defaultZone=http://peer2:2222/eureka/

第二台配置如下,

serviceUrl指向peer1

server.port=2222
spring.application.name=eureka-server2
eureka.instance.hostname=peer2
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/
 

2 启动两台服务注册中心,如下图,可以看到两个Eureka的注册中心

Eureka的搭建_第5张图片

 

3 修改服务方hello和消费方hello-consumer的配置,serviceUrl改为注册中心的集群的配置

  eureka:
  client:
    serviceUrl: #注册中心的注册地址
      defaultZone: http://peer1:1111/eureka/,http://peer2:2222/eureka/

 

总结:

eureka.client.register-with-eureka   表示向注册中心注册自己,如果是单台注册中心,该值是false,如果是多台做高可用,该值是true

eureka.client.fetch-registry   向注册中心检索服务,如果是单台注册中心,该值是false,如果是多台做高可用,该值是true

@EnableEurekaServer表示启动一个注册中心提供给其他应用

@EnableEurekaClient 注解,表示激活Eureka中的DiscoveryClient实现

@LoadBalanced注解开启客户端的负载均衡

对于注册中心eureka.client.serviceUrl.defaultZone; 单台注册中心的时候是自己的注册中心地址,多台高可用的时候是对方的注册中心的地址。

对于服务提供者和消费者 eureka.client.serviceUrl.defaultZone:注册中心的地址,多台高可用的时候是多个注册中心的地址,多个注册中心用逗号分离。

 

 

 

你可能感兴趣的:(SpringCloud)