使用Consul为服务注册中心, 实现服务提供者和服务消费者。
Consul服务提供者
添加依赖
<!-- SpringCloud Consul依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!-- Actuator 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
添加配置
spring.application.name=consul-provider
server.port=8504
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.serviceName=service-provider
provider.name=p1
开启服务注册功能
在启动类中添加注解@EnableDiscoveryClient. 开启服务注册
服务接口
@RestController
public class HelloController {
@Value("${provider.name}")
private String name;
@Value("${server.port}")
private String port;
@RequestMapping("/hello")
public String hello() {
return "provider:" + name + " port: " + port;
}
}
配置服务提供者集群
接下来添加配置文件application-consul-provider.properties,添加Consul的地址和端口号。
添加配置
spring.application.name=consul-provider
server.port=8505
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.serviceName=service-provider
provider.name=p2
启动服务提供者集群
打包服务提供者,然后打包jar 后分别以consul-provider1、consul-provider2的配置参数启动服务提供者
java -jar consulprovider-0.0.1-SNAPSHOT.jar --spring.profiles.active=consul-provider1
java -jar consulprovider-0.0.1-SNAPSHOT.jar --spring.profiles.active=consul-provider2
运行后在Consul控制中心有两个服务提供者,ID分别是consul-provider-8504,consul-provider-8505.
访问http://localhost:8504/hello,网页显示:provider:p1 port:8504
访问http://localhost:8505/hello,网页显示:provider:p2 port:8505
Consul 服务消费者
添加依赖
<!-- SpringCloud Consul依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
添加配置
spring.application.name=consul-consumer
server.port=8506
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.register=false
编写服务接口调用
@RestController
public class HelloController {
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("/hello")
public String hello() {
ServiceInstance serviceInstance = loadBalancerClient.choose("service-provider");
URI uri = serviceInstance.getUri();
String callService = new RestTemplate().getForObject(uri + "/hello", String.class);
System.out.println(callService);
return callService;
}
}
测试
多次访问http://localhost:8506/hello。网页交替出现provider:p1 port:8504 , provider:p2 port:8505,通过RestTemplate实现了客户端负载均衡。
网友评论