目录
Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go语言开发。
提供了微服务系统中的服务治理、配置中心、控制总线等功能,这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。
是什么?
能干啥?
- 基于Raft协议
- 比较简洁:支持健康检查
- 支持HTTP和DNS协议
- 支持跨数据中心的WAN集群
- 提供图形界面,跨平台
- 支持Linux、Mac、Windows
Consul安装与配置
下载consul
输入consul --version
consul agent -dev 启动命令
创建consul支付模块
1.创建新module
创建spring_cloud_consul_payment_8006 module
2. pom依赖
新增依赖
<!--Springcloud consul-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
3. 配置文件
#Consul服务端口号
server:
port: 8006
spring:
application:
name: cloud-provider-payment
datasource:
type: com.alibaba.druid.pool.DruidDataSource
#consul注册中心地址
cloud:
consul:
host: 127.0.0.1
# host: 47.105.184.98
port: 8500
discovery:
service-name: ${spring.application.name} ###对外暴露的服务名称
4. 主启动类
package com.tudeen.learn;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
/**
* 是因为springboot启动时会自动注入数据源和配置jpa
* @SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})
*/
@EnableDiscoveryClient
public class PaymentMain8006 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8006.class,args);
}
}
@EnableDiscoveryClient注解是基于spring-cloud-commons依赖,并且在classpath中实现;
@EnableEurekaClient注解是基于spring-cloud-netflix依赖,只能为eureka作用
5. controller
package com.tudeen.learn.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.UUID;
@RestController
@Slf4j
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/payment/consul")
public String getConsul(){
return "springcloud with consul: port: "+serverPort+","+ UUID.randomUUID().toString();
}
}
6. 启动服务
7. 查看状态
consul有页面化,可以在页面中直接看到当前cloud_procider_payment已经加入到consul
8. 调接口运行
http://127.0.0.1:8006/payment/consul
同理创建新的spring_cloud-consul-order-80模块
创建consul订单模块
1. 创建订单module
创建 spring_cloud-consul-order-80模块
2. pom 依赖
与 支付保存一致
<!--Springcloud consul-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
3. 配置文件
server:
port: 80
spring:
application:
name: cloud-order-service
datasource:
type: com.alibaba.druid.pool.DruidDataSource
#consul注册中心地址
cloud:
consul:
# host: 47.105.184.98
host: 127.0.0.1
port: 8500
discovery:
service-name: ${spring.application.name}
4. 主启动类
package com.tudeen.learn;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class OrderConsul80 {
public static void main(String[] args) {
SpringApplication.run(OrderConsul80.class, args);
}
}
5. controller
package com.tudeen.learn.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
@Slf4j
@RestController
public class OrderConsul80Controller {
@Resource
private RestTemplate restTemplate;
private static final String INVOKE_URL="http://cloud-provider-payment";
@GetMapping("/payment/consul")
public String getConsul(){
return restTemplate.getForObject(INVOKE_URL+"/payment/consul",String.class);
}
}