初学SpringCloud:使用ZooKeeper作为服务注册中心,搭建服务提供者的模块

目录

我的上一篇文章:

1、背景介绍

2、本篇博客的目的和工作任务

3、首先启动VMware上面的ZooKeeper服务注册中心,并且和Windows本机Ping通

4、开篇的POM文件

5、开始编写服务提供端的代码

6、我的下一篇博客文章


我的上一篇文章:

初学SpringCloud:使用ZooKeeper作为服务注册中心,搭建单机版ZooKeeper服务注册中心 之 在CentOS下安装ZooKeeper

1、背景介绍

目前我本人使用的是ZooKeeper作为服务注册中心。已经在Linux的CentOS7版本的操作系统下搭建成功了。并且CentOS7操作系统我本人在安装的时候,进行了必要选项的勾选,能够进行图形化界面的操作,并且本身已经默认可以联网,跟我的本机已经连通了。采用的是默认的NAT模式。

2、本篇博客的目的和工作任务

因为服务注册中心已经搭建完毕了,我现在需要搭建一个服务提供者的模块。由于主要学习的是微服务的知识,因此我的业务逻辑就尽可能的简单的书写了。

在这里我需要强调的一点是:跟前面的Eureka做比较的话,其实它们两个都是服务注册中心,只不过Eureka作为服务注册中心的话,使用的直接就是一个模块,启动这个模块就可以啦,当然也是需要有必要的application的配置的。ZooKeeper的话,由于是使用JAVA语言编写的,所以还需要JDK的环境的支持。为了尽可能的接触一下Linux的知识吧,也是为了符合当前开发的主流,我将ZooKeeper部署在了Linux操作系统之上。

3、首先启动VMware上面的ZooKeeper服务注册中心,并且和Windows本机Ping通

ping命令的具体作用,我本人由于Linux学习的不是很精,因此呢不能对这个命令做很详细的讲解。但是它的作用就是验证两台计算机之间是否可以连通。

我在我的上面一篇博客中也提到过,我安装CentOS7的时候,到勾选安装那些内容的时候,我勾选的是最全的,因此我安装完CentOS7以后,这台虚拟机直接就是可以上网的。也就是可以直接在火狐浏览器上面打开百度主页的,因此不需要进行网络的配置。

这样的话,我只需要在命令行查看一下本机的IP,然后在虚拟机的终端 ping一下本机的IP就可以啦,一般情况下都是可以ping通的。

 如上图所示,是我的本机的IP,获得了这个IP以后,直接在虚拟机的终端使用命令:

ping 192.168.11.1   

4、开篇的POM文件

下面是我的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>cloud2023</artifactId>
        <groupId>com.lanse.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-provider-payment8004</artifactId>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>


        <!--下面的这个依赖是引入了自己的那个模块新建成的jar包,就是把通用的entities提出来了-->
        <dependency>
            <groupId>com.lanse.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>


        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jdbc -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>


        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
            <optional>true</optional>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--加了下面这个依赖以后,application文件就可以正常识别了-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.4</version>
        </dependency>

        <!--下面这个是把zookeeper作为注册中心所必须的依赖-->
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-zookeeper-discovery -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.9</version>
        </dependency>

    </dependencies>

</project>

 前两个依赖的话,是配套的,这里我就不分析了,我本身也不是很明白。

第三个依赖,是我把每个微服务模块都会使用到的公共的一些实体类,抽出来组成了一个模块,然后这个模块使用install和package命令,打成了一个jar包,最后在依赖中引入进来了。再往下的依赖就是测试的,热部署的,插件的,mybatis的,JDBC的等我就不去详细的介绍了。我也不太明白其中包含了那些具体的功能。

最后还有两个依赖,是使用ZooKeeper作为服务注册中心必须的依赖。在这里我开了一个小小的玩笑,我先把一个jar包从依赖中剔除了出去,然后我在后面又把它给添加了进来。使用的版本比我安装的版本还要低一些。

5、开始编写服务提供端的代码

1、首先展示一下我的这个模块的代码结构:

首先就是application的配置文件。然后是一个主启动的类。最后是controller层的一个简单的方法。

2、application配置文件

代码如下:

server:
  port: 8004
spring:
  application:
    name: cloud-provider-payment
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/db2019?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong
    username: root
    password: 123456
  cloud:
    zookeeper:
      connect-string: 192.168.52.131:2181 #一个zookeeper机器的ip以及端口号

 首先就是设置一下端口,端口号设置为  8004

然后设置一下  spring.application.name    这个是一定要设置的。这个就是在ZooKeeper服务注册中心注册的时候的注册名。无论任何的服务注册中心,肯定注册进去的时候,都是要有服务名的。

再往下就是数据库的有关的配置,这个在前面的Eureka作为服务注册中心的时候,已经说过了。不再多说了。

下面是一个重点, spring.cloud.zookeeper.connect-string  属性是我们要注册进的服务注册中心的地址和端口号。

需要把虚拟机启动并且把ZooKeeper服务注册中心启动。具体的启动方式可以看我的上一篇文章。然后我下面通过命令行的方式看一下这台虚拟机的IP:

注意我图上面使用红颜色标记的地方。我使用的是  ifconfig  命令。IP显示是  192.168.52.131,所以我们就要注册到这个IP上去;在配置文件上面还有一个端口号,使用的是2181的端口号;我还不能做到对这一点的详细的解释。这里使用的2181的端口号是ZooKeeper默认的端口号,是对Clinet端提供服务的端口号。  就像是我们的连接MySQL使用的url中使用的3306端口号一样。

3、我的conreoller类

下面是代码:

package com.springcloud.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.UUID;
@RestController
@Slf4j
public class PaymentController {
    @Value("${server.port}")
    private String serverPort;

    @RequestMapping("/payment/zk")
    public String paymentzk(){
        return "spring cloud with zookeeper:"+serverPort+"\t"+ UUID.randomUUID().toString();
    }
}

这个类的代码是比较简单的。首先就是两个注解。其中的@Slf4j注解的功能在下面的代码中没有被使用到。  再往下就是一个 @Value注解,这个注解我之前讲过了,该注解的作用是将我们配置文件的属性读出来。也就是把application.yml文件中的一些配置属性的值读出来,放在类的私有属性中,使得我们可以在类方法中直接使用。

最好是使用  @Value("${server.port}")这种方法,直接写在类属性上面就行。

明显的,这样写了以后,serverPort字符串的值就是  8004

再往下就是一个@RequestMapping注解,然后是访问的路径。还有是一个方法,这个方法除了返回server.port属性以外,还返回一个随机生成的字符串   UUID.randomUUID().toString()

4、我的主方法

package com.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
//上面导入的包不能导入错误了,有两个包

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

上面的就是我的主方法的代码

首先@SpringBootApplication注解是肯定需要的

然后需要新加入一个注解  @EnableDiscoveryClient   我原先使用Eureka作为服务注册中心的时候,Client端使用的注解都是 @EnableEurekaClient   但是现在更换了服务注册中心以后,Client端(把需要注册进服务注册中心的微服务都统称为  Client  端)就需要更换注解了。

我也看了一些博客,大概这两个注解的区别就是:共同点都是 让注册中心能够发现,扫描到该服务。不同点是:@EnableEurekaClient只适用于Eureka作为注册中心,@EnableDiscoveryClient 可以是其他注册中心。它们两个来自的位置的距离也是有一点远的。都只是org.springframework.cloud,后面的就不一样了。

下面的main方法,都是一直在使用的,这里就不多说啦。

5、正式的启动这个微服务

启动这个微服务以后,就是成功的注册进了ZooKeeper服务注册中心了。但是ZooKeeper跟Eureka有一个不一样的地方,就是Eureka天生就是带有可视化界面的,Eureka可以通过自带的可视化界面看到有哪些的服务注册进来了。但是ZooKeeper是不带有这个可视化界面的,我看了一些博客,也可以自己配置可视化界面zkui。这里我本人就不配置了。

在这里我就不在展示ZooKeeper服务注册中心的启动过程了,这个过程在我的上一篇博客也是有的。

如果不出意外的话,8004端口的这个微服务是可以顺利启动的。

6、我的下一篇博客文章

初学SpringCloud:使用ZooKeeper作为服务注册中心,搭建服务消费者的模块

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

你是我的日月星河

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

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

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

打赏作者

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

抵扣说明:

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

余额充值