如果没有安装过zookeeper,请移步

zookeeper的单机安装 - 详细教程:https://blog.csdn.net/Kevinnsm/article/details/116134397

文章目录

    • 如果没有安装过zookeeper,请移步
  • 一、框架搭建
    • 1、创建父工程
    • 2、创建服务提供子模块(provider-ZKpayment-module)
    • 3、创建服务消费子模块(consumer-ZKpayment-module)
  • 二、代码准备
    • 1、父工程pom
    • 2、服务提供子模块pom
    • 3、消费服务子模块pom
    • 4、提供服务模块和消费模块服务模块启动类
    • 5、提供服务模块和消费模块服务模块application.yml文件
    • 6、提供服务模块和消费模块服务模块controller代码
    • 7、RestTemplate详解及其配置
  • 三、测试
  • 四、灵魂拷问?为什么需要注册中心

一、框架搭建

1、创建父工程



删除src目录

2、创建服务提供子模块(provider-ZKpayment-module)


3、创建服务消费子模块(consumer-ZKpayment-module)


二、代码准备

1、父工程pom

<?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"><modelVersion>4.0.0</modelVersion><groupId>com.cloud</groupId><artifactId>springcloud_all</artifactId><version>1.0-SNAPSHOT</version><modules><module>provider-ZKpayment-module</module><module>consumer-Zkpyament-module</module><module>provider-ZKpayment-module</module></modules><packaging>pom</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><junit.version>4.13</junit.version><log4j.version>1.2.17</log4j.version><lombok.version>1.16.18</lombok.version><mysql.version>8.0.19</mysql.version><druid.version>1.2.4</druid.version><mybatis.spring.boot.version>2.1.4</mybatis.spring.boot.version><druid.spring.boot.version>1.2.4</druid.spring.boot.version><springfox-swagger-ui.version>2.9.2</springfox-swagger-ui.version><springfox-swagger2.version>2.9.2</springfox-swagger2.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.4.3</version><type>pom</type><scope>import</scope></dependency><!--      spring-cloud 2020.0.2--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2020.0.2</version><type>pom</type><scope>import</scope></dependency><!--      spring-cloud alibaba--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2021.1</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid.version}</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.spring.boot.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid.spring.boot.version}</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>${springfox-swagger-ui.version}</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>${springfox-swagger2.version}</version></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><fork>true</fork><addResources>true</addResources></configuration></plugin></plugins></build>
</project>

2、服务提供子模块pom

<?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>springcloud_all</artifactId><groupId>com.cloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><groupId>com.provider</groupId><artifactId>provider-ZKpayment-module</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.common</groupId><artifactId>common-module</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zookeeper-discovery</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies></project>

3、消费服务子模块pom

<?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>springcloud_all</artifactId><groupId>com.cloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><groupId>com.consumer</groupId><artifactId>consumer-Zkpyament-module</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.common</groupId><artifactId>common-module</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zookeeper-discovery</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies></project>

4、提供服务模块和消费模块服务模块启动类

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

@EnableDiscoveryClient注解的作用:能够让注册中心能够发现,扫描到微服务。

5、提供服务模块和消费模块服务模块application.yml文件

server:port: 8004spring:application:name: provider-ZKpayment-modulecloud:zookeeper:connect-string: 8.140.37.103:2181
server:port: 80spring:application:name: consumer-ZKpayment-modulecloud:zookeeper:connect-string: 8.140.37.103:2181

6、提供服务模块和消费模块服务模块controller代码

@RestController
@Slf4j
public class ProviderController {@Value("${server.port}")private String serverPort;@GetMapping(value = "/provider/test")public String test() {return "提供服务模块服务端口号为:" + serverPort + "《--------------》" + UUID.randomUUID().toString();}
}
@RestController
@Slf4j
public class ConsumerController {private static final String URL = "http://provider-ZKpayment-module";@Resourceprivate RestTemplate restTemplate;@GetMapping(value = "/consumer/test")public String getData() {return restTemplate.getForObject(URL + "/provider/test", String.class);}
}

7、RestTemplate详解及其配置

RestTemplate是spring封装的一个服务端远程HTTP请求工具,支持常见的Rest请求(get、post等)
简单了说就是用来远程调用的,因为你订单模块是一个服务,消费模块又是一个单独的服务,两个服务端的端口号要进行交互,所以就有了RestTemplate

当然要注入RestTemplate(注意是在消费模块配置,因为是消费服务调用提供服务模块)

@Configuration
public class ApplicationContextConfig {@Bean@LoadBalancedpublic RestTemplate AutoRestTemplate() {return new RestTemplate();}
}

三、测试

启动提供服务模块和消费服务模块(注意一定要开启zookeeper服务,顺便进入zookeeper客户端)


在zookeeper客户端进行查看

接口测试调用

至此便成功了!

四、灵魂拷问?为什么需要注册中心

我们在微服务中首先需要面对的问题是服务之间如何进行通信呢?在单体架构中,我们只要将服务的接口暴露,然后通过http请求即可,微服务当然也可以这样。
问题是我们请求的url是固定的,单体服务为我们还可以很快的修改;一旦有大量的服务那就需要我们手动维护服务接口,配置负载均衡;服务宕机后,如何及时下线呢?
总而言之注册中心必不可少(至少当前时代是这样)。

教你一招如何使用几行代码实现zookeeper作为springcloud的服务注册中心相关推荐

  1. [教你做小游戏] 用86行代码写一个联机五子棋WebSocket后端

    我是HullQin,公众号线下聚会游戏的作者(欢迎关注公众号,发送加微信,交个朋友),转发本文前需获得作者HullQin授权.我独立开发了<联机桌游合集>,是个网页,可以很方便的跟朋友联机 ...

  2. [教你做小游戏] 用177行代码写个体验超好的五子棋

    我是HullQin,公众号线下聚会游戏的作者(欢迎关注公众号,发送加微信,交个朋友),转发本文前需获得作者HullQin授权.我独立开发了<联机桌游合集>,是个网页,可以很方便的跟朋友联机 ...

  3. 《第一行代码》总结之网络、服务(五)

    第九章看看精彩的世界--使用网络技术     若玩手机不能上网,那有什么用,微博.微信.QQ用了大量的网络技术.下面讲到了常用的网络技术: 9.1 WebView的用法 (1)适用范围:应用内展示网页 ...

  4. 详细教你如何部署ICE服务(三)---IceBox框架 Ice Registry服务注册中心的联合使用

    在详细教你如何部署ICE服务(二)---IceBox加载启动Ice服务这篇博客中,我们使用了IceBox来设计服务代码和启动Ice服务. 单单使用IceBox组件来设计和启动Ice服务,客户端必须将服 ...

  5. 教你一招,element表格行轻松上下移动

    前言 当我们在使用 element 表格时,经常会遇到需要对表格中的行进行上移或下移的情况.这个功能的实现还是比较简单的.本文将为大家介绍如何使用 element 表格组件轻松实现行与行之间的上下移动 ...

  6. 第一行代码学习笔记第十章——探究服务

    知识点目录 10.1 服务是什么 10.2 Android多线程编程 * 10.2.1 线程的基本用法 * 10.2.2 在子线程中更新UI * 10.2.3 解析异步消息处理机制 * 10.2.4 ...

  7. 《第一行代码》学习笔记35-服务Service(2)

    1.Android的UI线程不安全,想要更新应用程序里的UI元素,则须在主线程中进行,否则会出现异常. 2.Android不允许在子线程里进行UI操作,对于该情况,Android提供了一套异步消息处理 ...

  8. 《第一行代码》学习笔记37-服务Service(4)

    一个比较完整的自定义AsyncTask写成如下: class DownloadTask extends AsyncTask<Void, Integer, Boolean> {@Overri ...

  9. PyTorch最佳实践,教你写出一手风格优美的代码

    点击上方"菜鸟学Python",选择"星标"公众号 超级无敌干货第一时间推给你!!! 选自github 本文转自机器之心(nearhuman2014) PyTo ...

最新文章

  1. 12.1 LNMP架构介绍;12.2 MySQL安装;12.3-2.4 PHP安装(上下);12.5
  2. 【网络安全】如何使用PacketSifter从pcap中筛选出有用的信息
  3. TCP/IP详解学习笔记-基本概念
  4. fetch oracle 12c下载,十二、Oracle Fetch子句
  5. 从零开始学习音视频编程技术--转自雲天之巔
  6. Maven实战从入门到精通(全)
  7. 如何在地址栏显示图标
  8. Excel筛选后填充
  9. 转载|领英开源TonY:构建在Hadoop YARN上的TensorFlow框架
  10. 锐捷服务器虚拟化技术_打造数字新基建 | 锐捷5G云小站助力行业数字化转型
  11. 手机微信打不开连接到服务器错误代码,微信打不开文件是怎么回事(微信文件错误代码90018)...
  12. 《科学之路》读书笔记
  13. VPP DPDK,不是翻墙!!
  14. 福布斯中国20位最佳创业投资人出炉 女性占四席
  15. JAVA打印空三角形
  16. 笔记本连接投影仪全屏调试
  17. 环形缓冲区(Ring Buffer)使用说明
  18. 手机视频直播系统开发关于Js敏感词替换成*功能介绍
  19. 面试官:说说 Java CAS 原理?
  20. 三坐标检测之小测针的使用

热门文章

  1. TypeScript 入门
  2. HDU 1021 Fibonacci Again 简单数学题
  3. 15个相当不错的jQuery技巧
  4. 按照一定策略把网页抓回到搜索引擎服务器的,SEO新手学习:搜索引擎的基本步骤...
  5. Linux文件系统保存在哪里,文件系统保存在磁盘的()
  6. vpython 贞测碰撞_7、Pygame碰撞检测
  7. android wifimanager权限,Android 6.0.1 - 权限问题= wifiManager.getScanResults()返回0
  8. 睢县职教中心计算机专业18年高考 成绩,南模18年高考成绩喜人!想进这所学校,你需要知道这些~...
  9. 教你使用TensorFlow2判断细胞图像是否感染
  10. 【推荐系统】基于MovieLens数据集实现的协同过滤算法