SpringCloud系列(八)——SpringCloud集成Consul
程序员文章站
2022-03-14 09:48:35
...
Consul 的服务端:spring-cloud-consul-producer
- pom依赖
<dependencies>
<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>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
- 配置文件application.properties(Consul 的地址和端口号默认是 localhost:8500 ,如果不是这个地址可以自行配置。 spring.cloud.consul.discovery.serviceName 是指注册到 Consul 的服务名称,后期客户端会根据这个名称来进行服务调用。)
spring.application.name=spring-cloud-consul-producer
server.port=8501
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
#注册到consul的服务名称
spring.cloud.consul.discovery.serviceName=service-producer
- 启动类添加了 @EnableDiscoveryClient 注解表示支持服务发现
@SpringBootApplication
@EnableDiscoveryClient
public class SpringCloudConsulProducerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudConsulProducerApplication.class, args);
}
}
- 创建一个 HelloController,提供 hello 的服务
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "hello consul";
}
}
为了模拟注册均衡负载复制一份上面的项目重命名为 spring-cloud-consul-producer2 ,修改对应的端口为 8502,修改 hello 方法的返回值为:”hello consul 2”,修改完成后依次启动两个项目。
Consul 消费端:spring-cloud-consul-consumer
- 创建一个 spring-cloud-consul-consumer项目,pom 文件和上面示例保持一致。
- 配置文件(客户端可以设置注册到 Consul 中,也可以不注册到 Consul 注册中心中,根据我们的业务来选择,只需要在使用服务时通过 Consul 对外提供的接口获取服务信息即可。)
spring.application.name=spring-cloud-consul-consumer
server.port=8503
spring.cloud.consul.host=127.0.0.1
spring.cloud.consul.port=8500
#设置不需要注册到 consul 中
spring.cloud.consul.discovery.register=false
- 启动类
@SpringBootApplication
public class SpringCloudConsulConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudConsulConsumerApplication.class, args);
}
}
- 测试,创建一个 ServiceController ,试试如果去获取 Consul 中的服务。
@RestController
public class ServiceController {
@Autowired
private LoadBalancerClient loadBalancerClient;
@Autowired
private DiscoveryClient discoveryClient;
/**
* 获取所有服务
*/
@RequestMapping("/services")
public Object services() {
return discoveryClient.getInstances("service-producer");
}
/**
* 从所有服务中选择一个服务(轮询)
*/
@RequestMapping("/discover")
public Object discover() {
return loadBalancerClient.choose("service-producer").getUri().toString();
}
}
- 第二种方法来模拟调用服务端提供的 hello 方法,创建 CallHelloController。
@RestController
public class CallHelloController {
@Autowired
private LoadBalancerClient loadBalancerClient;
@RequestMapping("/call")
public String call(){
ServiceInstance serviceInstance = loadBalancerClient.choose("service-producer");
System.out.println("服务地址:" + serviceInstance.getUri());
System.out.println("服务名称:" + serviceInstance.getServiceId());
String callServiceResult = new RestTemplate().getForObject(serviceInstance.getUri().toString() + "/hello", String.class);
System.out.println(callServiceResult);
return callServiceResult;
}
}
上一篇: java.lang.IllegalStateException: Request URI does not contain a valid hostname
下一篇: 7-7 12-24小时制 (15分)
推荐阅读
-
springcloud学习之路: (五) springcloud集成SpringCloudConfig分布式配置中心
-
SpringCloud系列-整合Hystrix的两种方式
-
实战SpringCloud响应式微服务系列教程(第六章)
-
springcloud学习之路: (四) springcloud集成Hystrix服务保护
-
实战SpringCloud响应式微服务系列教程(第九章)使用Spring WebFlux构建响应式RESTful服务
-
springcloud Springboot vue.js Activiti6 前后分离 跨域 工作流 集成代码生成器 shiro权限
-
SpringCloud Zuul基于Consul配置及详解
-
实战SpringCloud响应式微服务系列教程(第十章)响应式RESTful服务完整代码示例
-
实战SpringCloud响应式微服务系列教程(第一章)
-
SpringCloud第二代实战系列:一文搞定Nacos实现服务注册与发现