使用Spring Cloud Consul实现服务的注册和发现

来源:互联网 发布:微信群淘宝优惠券代理 编辑:程序博客网 时间:2024/06/06 01:20

首先安装consul环境,参照之前的文章:http://blog.csdn.net/mn960mn/article/details/51753893

项目规划,2个服务端,1个客户端


首先来看服务端,

一:服务端1:

项目依赖

[java] view plain copy
  1. <dependencyManagement>  
  2.     <dependencies>  
  3.         <dependency>  
  4.             <groupId>org.springframework.cloud</groupId>  
  5.             <artifactId>spring-cloud-consul-dependencies</artifactId>  
  6.             <version>1.0.1.RELEASE</version>  
  7.             <type>pom</type>  
  8.             <scope>import</scope>  
  9.         </dependency>  
  10.     </dependencies>  
  11. </dependencyManagement>  
  12.   
  13. <dependencies>  
  14.     <dependency>  
  15.         <groupId>org.springframework.boot</groupId>  
  16.         <artifactId>spring-boot-actuator</artifactId>  
  17.         <version>1.3.5.RELEASE</version>  
  18.     </dependency>  
  19.     <dependency>  
  20.         <groupId>org.springframework.cloud</groupId>  
  21.         <artifactId>spring-cloud-starter-consul-discovery</artifactId>  
  22.     </dependency>  
  23. </dependencies>  

注意,增加spring-boot-actuator是为了项目可以访问/health 路径来判断服务是否健康

[java] view plain copy
  1. package com.pp.consul1;  
  2.   
  3. import org.springframework.boot.SpringApplication;  
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;  
  5. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;  
  6. import org.springframework.web.bind.annotation.RequestMapping;  
  7. import org.springframework.web.bind.annotation.RestController;  
  8.   
  9. @SpringBootApplication  
  10. @EnableDiscoveryClient  
  11. @RestController  
  12. public class ConsulApp {  
  13.       
  14.     @RequestMapping("/home")  
  15.     public Object home() {  
  16.         System.out.println("1111111111111");  
  17.         return "OK11";  
  18.     }  
  19.       
  20.     public static void main( String[] args ) {  
  21.         SpringApplication.run(ConsulApp.class, args);  
  22.     }  
  23. }  

application.properties 配置内容

[plain] view plain copy
  1. server.port=9955  
  2.   
  3. spring.application.name=Consul-Server-1  
  4. spring.cloud.consul.host=192.168.1.100  
  5. spring.cloud.consul.port=8500  
  6. spring.cloud.consul.enabled=true  
  7. spring.cloud.consul.discovery.enabled=true  
  8. spring.cloud.consul.discovery.instanceId=tomcat1  
  9. spring.cloud.consul.discovery.serviceName=tomcat  
  10. spring.cloud.consul.discovery.hostname=192.168.2.95  
  11. spring.cloud.consul.discovery.port=${server.port}  
  12. spring.cloud.consul.discovery.healthCheckUrl=http://192.168.2.95:9955/health  
  13. spring.cloud.consul.discovery.healthCheckInterval=10s  
  14. spring.cloud.consul.discovery.tags=dev  

看过我之前文章的,应该对这些配置很清楚了。这样,一个服务端就配置写好了。

由于我们增加了@EnableDiscoveryClient注解,所以,系统启动的时候,就会向consul注册一个服务,服务的名字为tomcat, ID为tomcat1

访问consul的HTTP API /v1/catalog/service/tomcat 输出如下:

[plain] view plain copy
  1. {  
  2.     "Node":"192.168.1.100",  
  3.     "Address":"192.168.1.100",  
  4.     "ServiceID":"tomcat1",  
  5.     "ServiceName":"tomcat",  
  6.     "ServiceTags":["dev"],  
  7.     "ServiceAddress":"192.168.2.95",  
  8.     "ServicePort":9955,  
  9.     "ServiceEnableTagOverride":false,  
  10.     "CreateIndex":993,  
  11.     "ModifyIndex":1057  
  12. }  

二:服务端2

项目依赖和上面一样

[java] view plain copy
  1. package com.pp.consul2;  
  2.   
  3. import org.springframework.boot.SpringApplication;  
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;  
  5. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;  
  6. import org.springframework.web.bind.annotation.RequestMapping;  
  7. import org.springframework.web.bind.annotation.RestController;  
  8.   
  9. @SpringBootApplication  
  10. @EnableDiscoveryClient  
  11. @RestController  
  12. public class ConsulApp {  
  13.       
  14.     @RequestMapping("/home")  
  15.     public Object home() {  
  16.         System.out.println("2222222222222222");  
  17.         return "OK22";  
  18.     }  
  19.       
  20.     public static void main( String[] args ) {  
  21.         SpringApplication.run(ConsulApp.class, args);  
  22.     }  
  23. }  
application.properties 配置内容:

[plain] view plain copy
  1. server.port=9966  
  2.   
  3. spring.application.name=Consul-Server-2  
  4. spring.cloud.consul.host=192.168.1.100  
  5. spring.cloud.consul.port=8500  
  6. spring.cloud.consul.enabled=true  
  7. spring.cloud.consul.discovery.enabled=true  
  8. spring.cloud.consul.discovery.instanceId=tomcat2  
  9. spring.cloud.consul.discovery.serviceName=tomcat  
  10. spring.cloud.consul.discovery.hostname=192.168.2.95  
  11. spring.cloud.consul.discovery.port=${server.port}  
  12. spring.cloud.consul.discovery.healthCheckUrl=http://192.168.2.95:9966/health  
  13. spring.cloud.consul.discovery.healthCheckInterval=10s  
  14. spring.cloud.consul.discovery.tags=test  

三:客户端

项目依赖,只需要spring-cloud-starter-consul-discovery

application.properties 配置内容:

[plain] view plain copy
  1. server.port=9977  
  2.   
  3. spring.application.name=Consul-Client  
  4. spring.cloud.consul.host=192.168.1.100  
  5. spring.cloud.consul.port=8500  
  6. spring.cloud.consul.discovery.register=false  
注意,这里的spring.cloud.consul.discovery.register需要配置成false,否则系统启动的时候,会向consul注册一个服务

[java] view plain copy
  1. package com.pp.client;  
  2.   
  3. import org.springframework.beans.factory.annotation.Autowired;  
  4. import org.springframework.boot.SpringApplication;  
  5. import org.springframework.boot.autoconfigure.SpringBootApplication;  
  6. import org.springframework.cloud.client.discovery.DiscoveryClient;  
  7. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;  
  8. import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;  
  9. import org.springframework.web.bind.annotation.RequestMapping;  
  10. import org.springframework.web.bind.annotation.RestController;  
  11.   
  12. @SpringBootApplication  
  13. @EnableDiscoveryClient  
  14. @RestController  
  15. public class ConsulClient  {  
  16.       
  17.     @Autowired  
  18.     private LoadBalancerClient loadBalancer;  
  19.       
  20.     @Autowired  
  21.     private DiscoveryClient discoveryClient;  
  22.       
  23.     /** 
  24.      * 从所有服务中选择一个服务(轮询) 
  25.      */  
  26.     @RequestMapping("/discover")  
  27.     public Object discover() {  
  28.         return loadBalancer.choose("tomcat").getUri().toString();  
  29.     }  
  30.       
  31.     /** 
  32.      * 获取所有服务  
  33.      */  
  34.     @RequestMapping("/services")  
  35.     public Object services() {  
  36.         return discoveryClient.getInstances("tomcat");  
  37.     }  
  38.       
  39.     public static void main( String[] args ) {  
  40.         SpringApplication.run(ConsulClient.class, args);  
  41.     }  
  42. }  

启动之后,就可以访问/discover,/services 查看效果了。
阅读全文
0 0
原创粉丝点击