SpringCloud系列(17)--将服务消费者Consumer注册进Zookeeper

news2025/1/16 7:51:47

前言:在上一章节中我们把服务提供者Provider注册进了Zookeeper,而本章节则是关于如何将服务消费者Consumer注册进Zookeeper

1、再次创建一个服务提供者模块,命名为consumerzk-order80
(1)在父工程下新建模块

(2)选择模块的项目类型为Maven并选择模块要使用的JDK版本
(3)填写子模块的名称,然后点完成即可完成创建 

效果图:

(4)修改consumerzk-order80子模块的pom.xml文件,然后reolad一下,下载依赖

例:

<?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>springcloud01</artifactId>
        <groupId>com.ken.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>consumerzk-order80</artifactId>


    <dependencies>
        <!--以下依赖都没写版本号,没写版本号的情况下会引用父项目的版本-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <!--lombok插件-->
        <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>
        <!--引入自己定义的api调用包,可以使用Payment模块的entity-->
        <dependency>
            <groupId>com.ken.springcloud</groupId>
            <artifactId>api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <!--Zookeeper Clinet-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        </dependency>
    </dependencies>

</project>
2、为子模块添加名为application的yml配置文件(注:yml是官方推荐的配置文件格式,最好使用yml文件而不是properties文件)

效果图:

3、修改application.yml文件配置
#服务端口号
server:
  port: 80

#服务名称
spring:
  application:
    name: cloud-consumer-order
  cloud:
    zookeeper:
      #zookeeper所在服务的ip和Client的端口号
      connect-string: 192.168.194.130:2181

 4、为consumerzk-order80子模块新建一个主启动类,类名输入com.ken.springcloud.OrderZkMain80 ,然后创建即可

 效果图:

5、编写consumerzk-order80子模块的主启动类
package com.ken.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

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

效果图:

6、在com.ken.springcloud包下新建config包和ApplicationContextConfig类,在类名输入config.ApplicationContextConfig,然后创建即可

效果图:

7、编写ApplicationContextConfig类的内容
package com.ken.springcloud.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ApplicationContextConfig {

    /**
     * RestTemplate提供了多种便捷访问远程Http服务的方法,是一种简单便捷的访问restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具集
     */
    @Bean
    //@LoadBalanced注解赋予RestTemplate负载均衡的能力
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }

}

8、在com.ken.springcloud包下新建controller包和OrderZkController控制类,在类名输入controller.OrderZkController,然后创建即可

效果图:

9、编写OrderZkController控制类的内容 
package com.ken.springcloud.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

@RestController
@Slf4j
public class OrderZkController {

    public static final String INVOKE_URL = "http://cloud-payment-service";

    @Resource
    private RestTemplate restTemplate;

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

}

10、查看zookeeper的节点
ls /services

可以发现现在zookeeper里的节点就只有一个cloud-payment-service

效果图: 

11、启动consumerzk-order80子模块 

效果图: 

12、重新查看zookeeper的节点
ls /services

可以发现现在zookeeper里的节点多出了一个clous-consumer-order节点,这个clous-consumer-order节点就是我们的consumerzk-order80服务,这证明consumerzk-order80成功注册进了zookeeper里

效果图: 

13、请求接口查看服务是否正常运行 

在地址栏输入http://localhost/consumer/payment/zk并回车调用接口,可以看到数据返回成功,这证明consumerzk-order80模块可以成功调用注册进zookeeper的provider-payment8004模块

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1628530.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WIFI加密方式对无线速率的影响

文章目录 无线加密三种选择&#xff1a;WEP、WPA和WPA2测试平台和测试方法非加密和WEP加密测试 结果差别巨大非加密条件下 300M无线路由实测WEP加密条件下 300M无线路由实测 TKIP加密算法&#xff1a;WPA与WPA2成绩低迷WPA加密&#xff08;TKIP加密算法&#xff09;条件下 300M…

TypeScript入门第一天,所有类型+基础用法+接口使用

表示逻辑值&#xff1a;true 和 false。在JavaScript和TypeScript里叫做boolean | | 数组类型 | 无 | 声明变量为数组。 // 在元素类型后面加上[] let arr: number[] [1, 2]; // 或者使用数组泛型&#xff0c;Array<元素类型> let arr: Array [1, 2]; | | 元组…

大数据—数据采集DataX

一、DataX介绍 官网&#xff1a; DataX/introduction.md at master alibaba/DataX GitHub DataX 是阿里云 DataWorks数据集成 的开源版本&#xff0c;在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。 DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、…

翻译《The Old New Thing》 - Why .shared sections are a security hole

Why .shared sections are a security hole - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20040804-00/?p38253 Raymond Chen 2004年08月04日 许多人会推荐使用共享数据节作为在应用程序的多个实例之间共享数据的一种方式。这听起来是个好…

立即刷新导致请求的response没有来得及加载造成的this request has no response data available

1、前端递归调用后端接口 const startProgress () > {timer.value setInterval(() > {if (progress.value < 100) {time.value--;progress.value Math.ceil(100 / wait_time.value);} else {clearInterval(timer.value);progress.value 0;timer.value null;time.…

pytest-asyncio:协程异步测试案例

简介&#xff1a;pytest-asyncio是一个pytest插件。它便于测试使用异步库的代码。具体来说&#xff0c;pytest-asyncio提供了对作为测试函数的协同程序的支持。这允许用户在测试中等待代码。 历史攻略&#xff1a; asyncio并发访问websocket Python&#xff1a;协程 - 快速创…

vscode安装中文插件不生效

在 escode 中&#xff0c;安装了上面的插件&#xff0c;但是界面依然显示的是英文。 解决方案 使用组合键 ctrshiftp&#xff0c;输入 Configure Display Language&#xff0c; 选中 zh-cn&#xff0c;重启

机器视觉3D视觉检测系统的优势

随着科技的飞速发展&#xff0c;机器视觉技术已经成为现代工业生产中不可或缺的一部分。特别是3D视觉检测系统&#xff0c;其优势日益凸显&#xff0c;为各行业的质量控制和生产自动化提供了强大的支持。本文将探讨机器视觉3D视觉检测系统的优势&#xff0c;并分析其在实际应用…

C语言入门课程学习笔记-6

C语言入门课程学习笔记-6 第27课 - 字符数组与字符串&#xff08;上&#xff09;第28课 - 字符数组与字符串&#xff08;下&#xff09;第29课 - 数组专题练习&#xff08;上&#xff09;第30课 - 数组专题练习&#xff08;下&#xff09; 本文学习自狄泰软件学院 唐佐林老师的…

【图像压缩算法】霍夫曼编码

1. 研究背景 霍夫曼在1952年提出一种构造最佳码的方法&#xff0c;称之为霍夫曼编码&#xff08;Huffman)。霍夫曼编码是一种无损的统计编码方法&#xff0c;利用信息符号概率分布特性的改变字长进行编码。霍夫曼编码适用于多元独立信源&#xff0c;对于多元独立信源来说它是最…

淘宝API接口大全:淘宝app商品详情数据接口

淘宝APP商品详情数据接口是用于获取商品详情信息的专用API&#xff0c;适用于移动应用开发者使用。 要使用这个接口&#xff0c;你需要遵循以下步骤&#xff1a; 了解和申请API权限&#xff1a;在使用淘宝API接口之前&#xff0c;需要先前往淘宝开放平台了解相关的API文档&am…

Git泄露和hg泄露原理理解和题目实操

一.Git泄露 1.简介 Git是一个开源的分布式版本控制系统&#xff0c;它可以实现有效控制应用版本&#xff0c;但是在一旦在代码发布的时候&#xff0c;存在不规范的操作及配置&#xff0c;就很可能将源代码泄露出去。那么&#xff0c;一旦攻击者发现这个问题之后&#xff0c;就…

速卖通自养号测评:如何规避安全风险?

对于初涉电商领域的新卖家而言&#xff0c;进行销量测评显得尤为关键。由于速卖通新店铺往往难以获得平台活动的支持&#xff0c;流量也相对匮乏&#xff0c;因此&#xff0c;开店的首要任务便是进行测评&#xff0c;通过积累一定的评论和销售数据。 测评的益处颇多&#xff0…

Java web应用性能分析之【sysbench基准测试】

Java web应用性能分析之【CPU飙高分析之MySQL】-CSDN博客 Java web应用性能分析之【Linux服务器性能监控分析概叙】-CSDN博客 Java web应用性能分析概叙-CSDN博客 Java web应用性能分析之【基准测试】-CSDN博客 上面基本科普了一下基准测试&#xff0c;这里我们将从sysbench…

leetCode60. 排列序列

leetCode60. 排列序列 方法一:语法版&#xff0c;面试官不认可的方法&#xff1a;next_permutation函数 // 方法一&#xff1a;使用next_permutation函数&#xff0c;将某容器设置为当前按照字典序 // 的下一个全排列的内容 class Solution { public:string getPermutation(in…

将游戏界面与注册/登录界面连接到一起

一、 导包 在注册页面中导入一个import subprocess包 二、 使用代码将其连接到一起 在循环中加入下面这一行代码&#xff0c;用来实现效果 subprocess.run(["python", "game代码.py"]

RocketMQ 部署

RocketMQ 部署 1、安装依赖&#xff08;Java&#xff09; [rootMicroservices ~]# mkdir -p /data/businessServer/ [rootMicroservices ~]# cd /data/businessServer/# 获取安装包&#xff08;下载较慢&#xff09; [rootMicroservices businessServer]# wget https://githu…

【深度学习实战(25)】搭建训练框架之ModelEMA

一、什么是ModelEMA&#xff1a; 在深度学习中&#xff0c;经常会使用EMA&#xff08;指数移动平均&#xff09;这个方法对模型的参数做平均&#xff0c;以求提高测试指标并增加模型鲁棒。 指数移动平均&#xff08;Exponential Moving Average&#xff09;也叫权重移动平均&a…

Redis面试题二(数据存储)

目录 1.redis 的数据过期策略 1. 惰性删除&#xff08;Lazy Expiration&#xff09; 2. 定期删除&#xff08;Periodic Expiration&#xff09; 3. 定时删除&#xff08;Timing-Based Expiration&#xff09; 实际应用中的组合策略 2.redis 有哪些内存淘汰机制 volatile&…

uniapp 根据不同角色实现动态底部TabBar导航栏

文章目录 前言最终效果一、实现步骤1.配置page.json中的tabBar属性2.创建自定义tabBar文件3.配置Vuex4.在main.js中引入并挂载store&#xff1a;5.登录页内引入自定义tabbar&#xff0c;根据角色进行登录验证6.在每个导航页中使用自定义的tabbar 前言 在UniApp的开发过程中&am…