什么是Consul?
-
Counsul是一套开源的分布式服务注册发现和配置管理系统,由HashiCorp公司用Go语言开发。
-
提供了微服务系统中的服务治理,配置中心,控制总线等功能。功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。
安装并运行
官网安装说明:https://learn.hashicorp.com/tutorials/consul/get-started-install?in=consul/getting-started
下载地址:https://www.consul.io/downloads
下载解压之后只有一个文件:consul.exe
使用开发模式启动:consul agent -dev
开启之后通过地址访问Consul首页:http://localhost:8500
JAVA服务注册
服务提供者
pom文件
// 核心依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
yml
server:
port: 8006
spring:
application:
name: conusl-provider-payment
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
controller
@RestController
@Slf4j
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@RequestMapping("payment/consul")
public String paymentConsul(){
return "Springboot with zookeeper:" + serverPort + "\t"+ UUID.randomUUID().toString();
}
}
启动成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dlIU9nIP-1617895212070)(C:\Users\Ming\Desktop\Consul服务注册\image-20210408222347302.png)]
服务消费者
pom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
yml
server:
port: 80
spring:
application:
name: cloud-consumer-order
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
start
@SpringBootApplication
@EnableDiscoveryClient
public class OrderConsulMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderConsulMain80.class, args);
}
@Bean
@LoadBalanced // 使用@LoadBalanced注解赋予RestTemplate负载均衡的能力
public RestTemplate getRestTemp(){
return new RestTemplate();
}
}
controller
@RestController
@Slf4j
public class OrderConsulController {
public static final String INVOKE_URL = "http://conusl-provider-payment";
@Autowired
private RestTemplate restTemplate;
@GetMapping("/consume/payment/consul")
public String paymentInfo(){
String result = restTemplate.getForObject(INVOKE_URL + "/payment/consul", String.class);
return result;
}
}
测试:http://localhost/consume/payment/consul
tForObject(INVOKE_URL + “/payment/consul”, String.class);
return result;
}
}
测试:http://localhost/consume/payment/consul