spring-cloud consul

2022-07-23  本文已影响0人  轻舞凋零

consul作为注册中心

consul提供的功能

consul的特点

多个注册中心的对比

功能 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服务的构成

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
上一篇 下一篇

猜你喜欢

热点阅读