springcloud(3)consul
consul也是一种注册中心,但它比较于其它的应用,界面显示更加清楚,CAP也是cp机制,对外暴露HTTP和dns接口同时集成了springcloud。
1.下载。
https://www.consul.io/downloads
官网自行选择对应版本。
2.安装运行。
本体下载之后只有一个exe文件,可以使用cmd打开当前文件夹输入指令启动。
consul --version查看对应版本 consul agent -dev 以开发者的模式启动。
默认端口是8500访问的时候输入localhost:8500即可。
3.服务提供者
比较于之前的服务提供者,consul注册的服务提供者需要加入额外对应的pom文件
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency>
yml文件中的注册地址也要做出相应的改变。
server:
port: 8006
spring:
application:
name: consul-provider-payment
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
剩下的就是controller进行一些测试,在consul的界面上可以看出活动。
4.消费者
pom导入consul依赖和上述一样。
yml格式也和上述差不多,需要改动端口和名称。
加入配置类文件appconfig
@Configuration public class AppConfig { /** * 注入restTemplate,请用请求rest接口 * @return */ @Bean // 标注此注解后,RestTemplate就具有了客户端负载均衡能力 // 负载均衡技术依赖于的是Ribbon组件~ // RestTemplate都塞入一个loadBalancerInterceptor 让其具备有负载均衡的能力 @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } }
负载均衡后续后提到。
controller文件示例
RestController @Slf4j public class ConsumerController { private static final String INVOKE_URL = "http://consul-provider-payment"; @Resource private RestTemplate restTemplate; @GetMapping(value = "/consumer/payment/consul") public String paymentInfo() { String result = restTemplate.getForObject(INVOKE_URL+"/payment/consul",String.class); return result; } }
在consul页面可以查看对应信息。
5.三种注册中心的差异性
本篇所有代码均在GitHub: