【SpringCloud】服务注册进Zookeeper

21 篇文章 1 订阅
5 篇文章 0 订阅

🔰 学习视频 🔰

尚硅谷SpringCloud框架开发教程(SpringCloudAlibaba微服务分布式架构丨Spring Cloud)

集数:28—30


🔰 学习格言 🔰

不在能知,乃在能行。


🔰 学习笔记 🔰

【Java】学习笔记汇总


一、Zookeeper

系列笔记:Zookeeper

【Zookeeper】介绍、安装和参数配置
【Zookeeper】集群配置、操作、选举机制、启动停止脚本、客户端命令操作、写数据流程

启动一台Zookeeper服务器(或虚拟机),关闭防火墙。

二、服务提供者

2.1 新建maven项目

新建mavern项目cloud-provider-payment8004

2.2 POM

pom中的依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>com.zqc.springcloud</groupId>
        <artifactId>cloud-api-commons</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <scope>true</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
</dependencies>

2.3 application.yml

注意修改ip地址

server:
  port: 8004
  
# 服务别名——注册zookeeper到注册中心名称
spring:
  application:
    name: cloud-provider-payment
  cloud:
    zookeeper:
      connect-string: 192.168.150.101:2181

2.4 主启动类

@SpringBootApplication
@EnableDiscoveryClient  // 该注解用于向使用consul或zookeeper作为注册中心时注册服务
public class PaymentMain8004 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8004.class, args);
    }
}

2.5 controller

显示当前zookeeper端口号,没其他功能。

@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();
    }
}

2.6 启动8004注册进zookeeper

🔶 步骤1:启动虚拟机内的zookeeper

./zkServer.sh start

🔶 步骤2:启动客户端

如果配置了zookeeper集群,记得要将所有的服务器启动。

./zkCli.sh

🔶 步骤3:运行主启动类,启动服务。

启动成功后,可在zookeeper服务器新增services节点。

[zk: localhost:2181(CONNECTED) 8] ls /
[services, zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /services
[cloud-provider-payment]
[zk: localhost:2181(CONNECTED) 2] ls /services/cloud-provider-payment
[fab07688-58f9-46da-8fc2-498bc59d5251]
[zk: localhost:2181(CONNECTED) 4] get /services/cloud-provider-payment/fab07688-58f9-46da-8fc2-498bc59d5251
{"name":"cloud-provider-payment","id":"fab07688-58f9-46da-8fc2-498bc59d5251","address":"DESKTOP-UGCFAQN","port":8004,"sslPort":null,"payload":{"@class":"org.springframework.cloud.zookeeper.discovery.ZookeeperInstance","id":"application-1","name":"cloud-provider-payment","metadata":{}},"registrationTimeUTC":1636684198438,"serviceType":"DYNAMIC","uriSpec":{"parts":[{"value":"scheme","variable":true},{"value":"://","variable":false},{"value":"address","variable":true},{"value":":","variable":false},{"value":"port","variable":true}]}}

使用json工具,可清楚的看到这些信息。

{
  "name": "cloud-provider-payment",
  "id": "fab07688-58f9-46da-8fc2-498bc59d5251",
  "address": "DESKTOP-UGCFAQN",
  "port": 8004,
  "sslPort": null,
  "payload": {
    "@class": "org.springframework.cloud.zookeeper.discovery.ZookeeperInstance",
    "id": "application-1",
    "name": "cloud-provider-payment",
    "metadata": {}
  },
  "registrationTimeUTC": 1636684198438,
  "serviceType": "DYNAMIC",
  "uriSpec": {
    "parts": [
      {
        "value": "scheme",
        "variable": true
      },
      {
        "value": "://",
        "variable": false
      },
      {
        "value": "address",
        "variable": true
      },
      {
        "value": ":",
        "variable": false
      },
      {
        "value": "port",
        "variable": true
      }
    ]
  }
}

如果出现zookeeper版本jar包冲突问题,需要保证zk服务器的版本,与服务使用的zk版本一致。修改pom.xml中的zookeeper,排除starter中的zookeeper,自己添加指定版本的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>
<!-- 添加zookeepers3.5.7-->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.5.7</version>
</dependency>

🔶 测试

浏览器访问:http://localhost:8004/payment/zk

结果:

springcloud with zookeeper: 8004 36ba77e0-8ea5-4692-80a5-5103117d3947

2.7 临时节点

刚刚注册的服务是临时节点,如果服务关闭了,超过了心跳时间,zookeeper会删除该服务的节点。、

启动服务后,关闭服务,在启动服务。可以在zookeeper服务中查看到。

[zk: localhost:2181(CONNECTED) 8] ls /services/cloud-provider-payment
[fab07688-58f9-46da-8fc2-498bc59d5251]
[zk: localhost:2181(CONNECTED) 9] ls /services/cloud-provider-payment
[fab07688-58f9-46da-8fc2-498bc59d5251]
[zk: localhost:2181(CONNECTED) 10] ls /services/cloud-provider-payment
[]
[zk: localhost:2181(CONNECTED) 11] ls /services/cloud-provider-payment
[]
[zk: localhost:2181(CONNECTED) 12] ls /services/cloud-provider-payment
[16d95111-8894-40ac-928c-f9cb89f38a8c]
[zk: localhost:2181(CONNECTED) 13] ls /services/cloud-provider-payment
[16d95111-8894-40ac-928c-f9cb89f38a8c]

三、服务消费者

3.1 新建maven项目

cloud-consumerzk-order80

3.2 POM

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>com.zqc.springcloud</groupId>
        <artifactId>cloud-api-commons</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <scope>true</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
</dependencies>

3.3 application.yml

server:
  port: 80

spring:
  application:
    name: cloud-consumer-order
  cloud:
    # 注册到zookeeper地址
    zookeeper:
      connect-string: 192.168.150.101:2181

3.4 主启动类

@SpringBootApplication
@EnableDiscoveryClient
public class OrderZKMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderZKMain80.class, args);
    }
}

3.5 业务类

3.5.1 ApplicationContextConfig

@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

3.5.2 OrderZKController

@RestController
@Slf4j
public class OrderZKController {

    public static final String INVOKE_URL = "http://cloud-provider-payment";
    
    @Resource
    private RestTemplate restTemplate;

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

3.6 运行测试

🔸 运行8004和80服务,在zookeeper服务器上可查看到:

[zk: localhost:2181(CONNECTED) 15] ls /services
[cloud-consumer-order, cloud-provider-payment]

说明消费者和提供者都已经注册完毕。

🔸 浏览器访问:http://localhost:8004/payment/zk

调用成功,结果:

springcloud with zookeeper: 8004 af5a16a3-d1ae-4568-ad13-de0bb2a3c176

🔸 浏览器访问:http://localhost/consumer/payment/zk

调用成功,结果:

springcloud with zookeeper: 8004 d834bdab-19d3-4770-b0f2-48a0a1b18d6d
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

望天边星宿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值