本文最后更新于29 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
项目背景
现有两个服务端口
- 81 消费者端口 下单
- 8001 生产者端口 支付
现已实现消费端下单
consul
介绍
在Spring Cloud Consul中,使用最广泛的两个功能是 服务注册与发现 和 分布式配置管理
安装
- 官网下载与电脑对应的consul软件
- 运行软件后在cmd中进入开发者模式 consul agent -dev
服务注册与发现
- 依赖注入到pom.xml文件中
<!--SpringCloud consul discovery -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
- 在application.yml中添加consul相关配置
spring:
application:
name: cloud-consumer-order
####Spring Cloud Consul for Service Discovery
cloud:
consul:
host: localhost
port: 8500
discovery:
prefer-ip-address: true #优先使用服务ip进行注册
service-name: ${spring.application.name}
- 在服务入口文件中添加注释:
@EnableDiscoveryClient
- 启动服务器
小问题
1.由于是分成不同模块,81需要用到8001的端口引用,引用的url可以直接换成8001应用名
2.由于consul默认支持负载均衡,但RestTemplate默认不会负载均衡,所以导致无法通过81访问到8001,修改方法:在RestTemplate的bean注入时添加注解@LoadBalanced
分布式配置管理
- 注入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
- 编写bootstrap.yml文件,这个文件的优先级最高,在项目启动时就会提前解析。所以一些application.yml需要用到的属性可以现写入这个文件,形成k-v键值对注入到application.yml中
spring:
application:
name: cloud-payment-service
####Spring Cloud Consul for Service Discovery
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
config:
profile-separator: '-' # default value is ",",we update '-'
format: YAML