美文网首页
spring-cloud consul

spring-cloud consul

作者: 轻舞凋零 | 来源:发表于2022-07-23 10:26 被阅读0次

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配置

<?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端

@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 端

@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

相关文章

网友评论

      本文标题:spring-cloud consul

      本文链接:https://www.haomeiwen.com/subject/mdbiirtx.html