每天二十分钟spring-cloud的consul的使用

2022-07-23 23:31:23 浏览数 (2)

consul作为注册中心

consul提供的功能

  • 支持多数据中心的服务注册,服务发现和服务配置
  • 基于raft试下一致性算法
  • 使用gossip协议管理成员状态和广播消息
  • 支持ACL访问控制

consul的特点

  • 高效的raft一致性算法
  • 支持多数据中心
  • 监控检查
  • http和DNS支持

多个注册中心的对比

功能

eureka

consul

zookeeper

etcd

服务监控检查

支持

支持(服务状态,内存,磁盘)

弱支持(长连接 keeplived)

连接心跳

多数据中心

不支持

支持

不支持

不支持

key-val存储服务

不支持

支持

支持

支持

一致性

不支持

支持

支持

支持

CAP

AP

CP

CP

CP

使用接口

http

http 和dns

客户端

http grpc

watch支持

支持long poling(长轮询)

支持long poling

支持

支持long poling

自身监控

支持

支持

不支持

metrics

安全

spring-secrity

acl https

ACL

https

springcloud集成

支持

支持

支持

支持

consul服务的构成

  • server(多机器部署,一般是基数位的机器,leader负责写入。同数据中心使用LAN,不同数据中心使用WAN)

consul运行

/usr/local/bin/consul agent -dev -ui=true -client 0.0.0.0 &

spring服务运行

maven配置

代码语言:txt复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>kconsul</artifactId>
        <groupId>cn.beckbi</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>kconsul-server</artifactId>


    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>



        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>


</project>

server端

代码语言:txt复制
@RestController
public class UserController {

    private ObjectMapper mapper = new ObjectMapper();


    @RequestMapping("/info")
    public String info()  throws JsonProcessingException {

        @Data
        class User {
            private String name;
            private int age;
        }
        User user = new User();
        user.setName("tom");
        user.setAge(21);
        return mapper.writeValueAsString(user);
    }
}
spring.application.name=consul-server
server.port=7301


spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.service-name=consul-server-producer

client 端

代码语言:txt复制
@Slf4j
@RestController
public class ApiController {


    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private LoadBalancerClient loadBalancerClient;

    @RequestMapping("/info")
    public String info() {
        ServiceInstance serviceInstance = loadBalancerClient.choose("consul-server-producer");
        log.info("url:" serviceInstance.getUri());
        log.info("url:" serviceInstance.getServiceId());

        return restTemplate.getForObject(
                serviceInstance.getUri().toString() "/info", String.class
        );
    }
}
@Configuration
public class RestConfig {


    @Bean
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}


spring.application.name=consul-client-consumer
server.port=7302

spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.service-name=consul-client-consumer

0 人点赞