Dubbo+Zookeeper+SpringBoot服务注册小demo

Posted 小样5411

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dubbo+Zookeeper+SpringBoot服务注册小demo相关的知识,希望对你有一定的参考价值。

前言

在完成Dubbo+Zookeeper安装与配置后,我们总要知道这两个有什么用,能干什么,这篇文章就带你了解,这两个具体干什么的。
还没配置的可以先看我这篇文章配一下: Dubbo+Zookeeper配置安装

主要就是Provider到注册中心注册,然后Consumer再到注册中心拿。有点类似于生产者与消费者,我们到IDEA新建两个SpringBoot模块,分别为Provider和Consumer,如Provider卖电影票,Consumer买电影票,一个产生一个消费

一、Provider

新建一个SpringBoot项目,叫provider-server
在这里插入图片描述
没用的删了
在这里插入图片描述
在这里插入图片描述

假设Provider提供卖票服务
TicketService.java

public interface TicketService {
    String getTicket();
}

TicketServiceImpl.java

import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Service;

@DubboService
@Service
public class TicketServiceImpl implements TicketService{
    @Override
    public String getTicket() {
        return "出一张电影票";
    }
}

我们现在就是要从Consumer拿到Provider中的服务(卖票),Provider都有自己的启动类,启动后都对应一个端口,这个端口可以在resources下的application.properties配置,此处Provider是8001,项目一启动就会进行自动扫描注册,将服务放到注册中心

server.port=8001
server.port=8002

两个启动类分别启动就属于两个服务,启动会把自己的服务给注册中心,要给注册中心就先要导一些依赖

<dependencies>
        <!--        Dubbo+Zookeeper-->
        <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.8</version>
        </dependency>

        <!--        zkclient-->
        <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

        <!--        引入zookeeper-->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.12.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <!--排除slf4j-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
		<!--Spring Web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

下面要详细配置application.properties
我们之前看过dubbo-admin中application.properties的配置
在这里插入图片描述
现在和这个差不多
首先配provider中的

# 端口
server.port=8001
# 服务应用名字
dubbo.application.name=provider-server
# 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 哪些服务要被注册
dubbo.scan.base-packages=com.yx.service

配置后可以开始启动,首先启动zookeeper,也就是zookeeper目录下的bin下的zkServer.cmd,以管理员运行,对应dubbo也要启动,用命令

java -jar dubbo的jar包名称

这个在配置时都学过,不详细展开,可以看我开始推荐的配置文章
输入localhost:7001进入Dubbo可视化界面,可以看到自己的注册的服务,也就是启动后,扫描到@DubboService注解,那么就会注册到注册中心
在这里插入图片描述
点进入看一下
在这里插入图片描述
可以看到他将TicketService这个服务注册了,卖票服务就有了,然后就需要人买票了,也就是消费

二、Consumer

同理也创建一个consumer-server
在这里插入图片描述
同样先配置依赖,这个依赖和provider一样,直接复制上面的就行

依赖完了就配置application.properties

# 端口
server.port=8002
# 服务应用名字
dubbo.application.name=consumer-server
# 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 哪些服务要被注册
dubbo.scan.base-packages=com.yx.service

这就相当于发快递,provider发快递,然后consumer取快递

UserService.java

import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    //想拿到provider-server提供的票,要去注册中心拿服务
    @DubboReference     //两种引用方式:1、POM坐标    2、定义路径相同的接口名(不用实现类)这里用第二个
    TicketService TICKET_SERVICE;
    
    public void buyTicket(){
        String ticket = TICKET_SERVICE.getTicket();
        System.out.println("在注册中心拿到->"+ticket);
    }
}

TicketService.java就复制一下之前写的就行,只要这个接口,因为上面代码注解也写了,引用有两种,一是通过路径相同的,如com.yx.service.TicketService,相当于通过这个路径可以访问到provider的,TICKET_SERVICE可以获取远程的方法,开发中我们会用pom坐标,但这里先介绍第二种
在这里插入图片描述
写个测试,在test中写
在这里插入图片描述

@SpringBootTest
class ConsumerServerApplicationTests {

    @Autowired
    UserService userService;//本地的
    
    @Test
    void contextLoads() {
        userService.buyTicket();
    }

}

启动一下方法contextLoads,拿到provider提供的电影票
在这里插入图片描述

三、视频讲解

https://www.bilibili.com/video/BV1PE411i7CV?p=60

以上是关于Dubbo+Zookeeper+SpringBoot服务注册小demo的主要内容,如果未能解决你的问题,请参考以下文章

Dubbo实战 Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务

Dubbo实战 Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务

[Dubbo实战]dubbo + zookeeper + spring 实战 (转)

dubbo为啥用到了zookeeper

dubbo使用zookeeper连接,zookeeper宕机后怎么处理

dubbo使用zookeeper连接,zookeeper宕机后怎么处理