在SpringBoot中使用Dubbo+Zookeeper

1.什么是Dubbo

​ 下载地址:https://github.com/apache/dubbo-admin/tree/master

  • 他是Apache公司下的一款分布式框架
  • dubbo是一款高性能、轻量级的开源Java RPC框架,他提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现;
  • dubbo本身并不是一个服务软件,它其实就是一个jar包,能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。
  • 但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序dubbo-admin,不过这个监控即时不装也不影响使用。

下载完之后,解压jar包:找到当前路径:target

使用cmd打开当前目录:输入mvn clean package -Dmaven.test.skip = true,进行安装打包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pyLXHln0-1603268709424)(C:\Users\11111\AppData\Roaming\Typora\typora-user-images\image-20201003204951836.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8tpWR2rD-1603268709427)(C:\Users\11111\AppData\Roaming\Typora\typora-user-images\image-20201003204823664.png)]

出现success安装成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d9KiCfdw-1603268709428)(C:\Users\11111\AppData\Roaming\Typora\typora-user-images\image-20201003205204871.png)]

通过访问**localhost:7001/**可以进入到dubbo监控管理页面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jDWNODQA-1603268709429)(C:\Users\11111\AppData\Roaming\Typora\typora-user-images\image-20201003205541092.png)]

2.zookeeper

下载地址:https://downloads.apache.org/zookeeper/

标题

可能会遇到的问题:在bin目录下双击zkServer.cmd会闪退

在config目录下复制一份zoo_sample.cfg文件修改一下文件名就好了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jxogg9jh-1603268709431)(C:\Users\11111\AppData\Roaming\Typora\typora-user-images\image-20201003204058896.png)]

3.springboot+dubbo+zookeeper服务注册发现实战

  1. 创建一个空项目

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OlSZzgQV-1603268709433)(C:\Users\11111\AppData\Roaming\Typora\typora-user-images\image-20201003205758125.png)]

  2. 然后创建第一哥springboot项目,添加web依赖:provider-service(服务端的提供者)

    1.引入相关jar包:

    <!--导入依赖:Dubbo + zookeeper-->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.3</version>
    </dependency>
    <!--引入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-log4j12-->
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

    2.创建service层:TicketService

    package com.ddf.service;
    
    public interface TicketService {
    
        public String getTicket();
    }
    

    3.创建实现类:TicketServiceImpl

    package com.ddf.service;
    
    
    import org.apache.dubbo.config.annotation.Service;
    import org.springframework.stereotype.Component;
    
    //注意这里的Service注解使用的是apache下面的,如果是spring的会扫描不到
    @Service    //可以被扫描到,在项目一启动就自动注册到注册中心
    @Component      //使用了Dubbo后尽量不要用Service注解
    public class TicketServiceImpl implements TicketService {
        @Override
        public String getTicket() {
            return "《ddf你好啊》";
        }
    }
    

    4.设置端口号:application.properties

    server.port=8001
    

    5.注册中心地址:

    server.port=8001
    
    # 服务应用名字
    dubbo.application.name=provider-service
    #注册中心
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    #哪些服务要被注册
    dubbo.scan.base-packages=com.ddf.service
    
  3. 创建第二个springboot项目,添加web依赖:consumer-service(客户端的消费者)

    1.引入相关jar包:

    <!--导入依赖:Dubbo + zookeeper-->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.3</version>
    </dependency>
    <!--引入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-log4j12-->
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

    2.设置端口号:

    server.port=8002
    

    3.创建service层:

    UserService

    package com.ddf.service;
    
    import org.apache.dubbo.config.annotation.Reference;
    import org.springframework.stereotype.Service;
    
    @Service    //放到容器中
    public class UserService {
        //想拿到provider-service提供的票,要去注册中心拿到服务
    
        @Reference  //引用,
        TicketService ticketService;
    
        public void buyTicket(){
            String ticket = ticketService.getTicket();
            System.out.println("在注册中心拿到=》" + ticket);
        }
    }
    

    TicketService(注意:这个接口的路径要和provider-service项目里面的TicketService一致,要不然运行项目就会报错

    package com.ddf.service;
    
    public interface TicketService {
    
        public String getTicket();
    }
    

    4.注册中心地址:

    server.port=8002
    
    # 服务应用名字
    dubbo.application.name=consumer-service
    #注册中心
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    

注意:如果出现了这个错误:说明7001这个端口号已经在使用了,需要关闭它

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m0aHhQ1i-1603268709435)(C:\Users\11111\AppData\Roaming\Typora\typora-user-images\image-20201003211900697.png)]

然后在运行:zookeeper里面的文件和dubbo里面的target

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vKWNdOco-1603268709438)(C:\Users\11111\AppData\Roaming\Typora\typora-user-images\image-20201003212249854.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ag8rV4QS-1603268709440)(C:\Users\11111\AppData\Roaming\Typora\typora-user-images\image-20201003212656031.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XHIrIDY8-1603268709442)(C:\Users\11111\AppData\Roaming\Typora\typora-user-images\image-20201003212741732.png)]

运行provider-service:springboot的项目访问:localhost:7001/,输入账号密码为root,进入dubbo监听管理页面,这个时候我们启动的springboot项目的服务名就可以监听到

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ojBemDbH-1603268709443)(C:\Users\11111\AppData\Roaming\Typora\typora-user-images\image-20201003213159982.png)]

运行consumer-service项目在测试类调用userService接口调用方法:我们就可以在另一个服务器上取到对应的数据

package com.ddf;

import com.ddf.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class ConsumerServiceApplicationTests {

    @Autowired
    UserService userService;

    @Test
    void contextLoads() {

        userService.buyTicket();
    }
}

运行结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SIfTYIpW-1603268709444)(C:\Users\11111\AppData\Roaming\Typora\typora-user-images\image-20201003213956293.png)]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值