Springcloud 服务注册与发现(Zookeeper)

在前一篇中,提到服务注册中心Eureka,Eureka1.0版本,在当时大受欢迎,很快便发布了2.0版本,但是2.0版本将近三年,依然没有面世,背后的原因有很多,神仙相互不服,所以导致Eureka停更,后继版本也无望,所以,他的替代品,或者说比他更厉害的组件一个个跳出来。比如Zookeeper、Consul、Nacos,接下来就介绍一下Zookeeper。
Zookeeper
它是一个分布式协调工具,可以实现注册中心功能,需要下载相应的软件,下载链接放在文末。
关闭Linux的防火墙后启动zookeeper服务器,作为服务注册中心。
进入bin目录后先后执行 ./zkServer.sh start 和./zkCli.sh
分别启动服务端和客户端
在这里插入图片描述

cloud-provider-payment8004

  1. POM文件
<dependencies>
<!--        zookeeper-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<!--             先排除自带的zookeeper3.5.3-->
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
<!--        添加3.5.8版本-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.5.8</version>
<!--            在排除zookeeper自带的3.5.3之后,运行还会报错,经查发现是slf4j的版本冲突-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>


        <!--引入自己定义的api通用包,可以使用payment支付的Entity-->
        <dependency>
            <groupId>com.wyh.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
<!--            排除这个slf4j-log4j12-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>





        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>
  1. application.yml
#8004表示注册到zookeeper服务器的支付服务端口号
server:
  port: 8004

#服务别名-----注册zookeeper到注册中心名称
spring:
  application:
    name: cloud-provider-payment
  cloud:
    zookeeper:
      connect-string: 192.168.211.136:2181

  1. 主启动类
@SpringBootApplication
@EnableDiscoveryClient//该注解用于向使用cousul或者zookeeper作为注册中心时注册服务
public class PaymentMain8004 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8004.class,args);
    }
    
    //zookeeper的服务节点是临时的,当某个客户端宕机时,zookeeper会剔除,
    // 当重启客户端时,zookeeper监测到心跳,又会重新加载到服务列表
}
  1. controller
@RestController
@Slf4j
public class PaymentController {
    @Value("${server.port}")
    private String serverPort;

    @RequestMapping(value = "/payment/zk")
    public String paymentzk(){
        return "springcloud with zookeeper:"+serverPort+"\t"+ UUID.randomUUID().toString();
    }
}
  1. 启动
    启动以后会出现报错,原因是jar包冲突,相关依赖我已剔除,上述依赖为最终依赖
    在这里插入图片描述
    在浏览器输入http://localhost:8004/payment/zk进行测试
    在这里插入图片描述
    并且再次访问linux下的zookeeper,会出现
    在这里插入图片描述
    将流水号输进linux控制台中
    在这里插入图片描述
    得到目标json串。

Zookeeper和Eureka
两者相比,Zookeeper属于临时节点,而Eureka属于持久节点,当某一进程关闭后,Eureka并不会立即剔除你,而是会经过很长一段时间的心跳确认,若发现程序已死,再去剔除,Zookeeper则是短时间内剔除。

cloud-consumerzk-order80

  1. POM文件
<dependencies>

<!--        springboot整合zookeeper客户端-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
                <!--             先排除自带的zookeeper3.5.3-->
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.zookeeper</groupId>
                        <artifactId>zookeeper</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!--        添加3.5.8版本-->
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.5.8</version>
                <!--            在排除zookeeper自带的3.5.3之后,运行还会报错,经查发现是slf4j的版本冲突-->
                <exclusions>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        <!--引入自己定义的api通用包,可以使用payment支付的Entity-->
        <dependency>
            <groupId>com.wyh.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>

        <!--        springboot整合web组件-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!--            排除这个slf4j-log4j12-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

  1. application.yml
server:
  port: 80

spring:
  application:
    name: cloud-consumer-order
  cloud:
    #注册到zookeeper地址
    zookeeper:
      connect-string: 192.168.211.136:2181
  1. 主启动类
@SpringBootApplication
@EnableDiscoveryClient//该注解用于向使用cousul或者zookeeper作为注册中心时注册服务
public class OrderZKMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderZKMain80.class,args);
    }
}

  1. 业务类(配置Bean)
@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}
  1. 业务类(Controller)
@RestController
@Slf4j
public class OrderZKController {
    public static final String INVOKE_URL="http://cloud-provider-payment";

    @Resource
    private RestTemplate restTemplate;

    @GetMapping(value = "/consumer/payment/zk")
    public String paymentInfo(){
        String result = restTemplate.getForObject(INVOKE_URL+"/payment/zk",String.class);

        return result;
    }
}
  1. 测试(http://localhost/consumer/payment/zk)
    在这里插入图片描述

  2. linux下在这里插入图片描述

软件
链接:https://pan.baidu.com/s/1aZ4KN1hd08QXZb89BGx9dA
提取码:6yc0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值