前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot 整合 Dubbo,Zookeper,Dubbo-Admin 教程 不涉及原理

Spring Boot 整合 Dubbo,Zookeper,Dubbo-Admin 教程 不涉及原理

作者头像
收心
发布2022-01-14 08:27:53
3460
发布2022-01-14 08:27:53
举报
文章被收录于专栏:Java实战博客

SpringBoot 注解+Yml配置 整合 Dubbo 、Zookeper

首先 要知道Dubbo、Zookeper依赖知道是什么

代码语言:javascript
复制
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-log4j12</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>

        </dependency>
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

说明,上面排除了 slf4j-log4j12 依赖,不排除会报错,这里我忘记了爆的是包重复依赖还是其他问题

流程 快速过一遍

创建2个工程,一个是生产者,一个是消费者,都要上面的zkclient、dobbo依赖都加上。

然后要了解

消费者:只写Controller与Service接口,不写具体实现的类

生产者:只写Service接口与ServiceImpl实现类

同时 controller层 不再使用 @Autowired注解,而是换用com.alibaba.dubbo.config.annotation.Reference的 @Reference注解

ServiceImpl 实体类上使用@Service注解,要使用Dubbo包下的哦,不然会出现空指针异常 他的作用是 暴露服务

在Applicaiton启动类上 加上@EnableDubbo

还要配置一下Dubbo的配置,不然 是不知道的注册中心在哪里。

知道流程之后,我们再讲解一下 Zookeper、Dubbo-admin2.6.0的使用教程

Zookeper 从网上可以下载,下载后,需要进入配置文件,复制一份zoo_sample.cfg 改名为 zoo.cfg,然后就可以直接启动了,启动不了 ,看下我文章,上面有一些排错(再启动命令最后加上@pause 即可),这里不做详细介绍,不然,文章显得臭而长

Dubbo-admin 我采用的是2.6.0的版本,首先这是个war包,弄个tomcat放进去。再配置文件 webapps\dubbo-admin-2.6.0\WEB-INF 有个 dubbo.properties 文件,你可看到账号密码,也可以修改账号 与密码,root root,guest guest (修改密码,要重启tomcat生效)

到这,启动Tomcat ,然后访问 http://127.0.0.1:8080/dubbo-admin-2.6.0 (为什么名字臭长,因为war包就这个名字,tomcat启动,解析出的文件就叫这个)

行了 输入密码 看到

行,我们dubbo-admin 也会启动了,

我们简单讲逻辑与启动流程。

首先 启动zookeeper 作为注册中心,然后,启动dubbo-admin,你可监控zookeper已经注册上去的服务。接下来,你可以启动你的生产者,消费者了(这里就没有先后顺序了)。

两个服务启动成功,就可以开始调用服务了。

(看看是不是相应的结果出现,只要不是空指针异常,没什么大问题。)

网上说的很多,空指针的方式解决方案,我们只能瞎猫去碰,没有从根本教我们去排查,太他妈坑了。

这里,我说下排查这个调用空指针的流程

首先,确定生产者、消费者服务能启动,不报错。

然后看下 @Service @Reference 是不是正确的包名。

然后去注册中心可视化的 dubbo-admin 看,是否注册上去了。

(没注册上去,那就想办法,注册上去,看看端口对不对,之类的)

注册上去了,调用依旧是空指针。不出意外,老铁,咱俩遇到的问题一样,你看看你service的生产者与消费者,接口名是否一样,不一样,会爆空指针异常哦。

如果还没解决,真的,铁子,去看看你逻辑有没有写错。实在不行,咱看看我下面的代码吧

开码

说明 : 包名为 com.zanglikun 下面AS 用红色标注,是希望提醒老哥,不要写错大小写 不然 你会再来看我这句话 哈哈哈。

pom文件的代码 生产者、消费者是一样的 其中 zkclient 是 zookeper 的依赖,dubbo 是 dubbo 的依赖

代码语言:javascript
复制
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-log4j12</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>

        </dependency>
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

生产者代码:看下结构,只有service层哦 切记

AService

代码语言:javascript
复制
public interface AService {
    String sayhello(String name);
}

AServiceImpl

代码语言:javascript
复制
import com.alibaba.dubbo.config.annotation.Service;
import com.zanglikun.service.AService;
@Service
public class AServiceimpl implements AService {
    @Override
    public String sayhello(String name) {
        return "Hello"+name;
    }
}

消费者结构:有Controller,service,但没有具体实现的impl类 切记

先看Controller类 类名叫:AController

代码语言:javascript
复制
import com.alibaba.dubbo.config.annotation.Reference;
import com.zanglikun.service.AService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/a")
public class AController {
    @Reference

    private AService aservice;
    
    @GetMapping("b")
    public String say(String name){
      return aservice.sayhello(name);
    }
}

再看service AService接口

代码语言:javascript
复制
public interface AService {
    String sayhello(String name);
}

代码基本算写完。然是Dubbo不知道往哪里注册啊。

说下生产者的Yml配置

代码语言:javascript
复制
server:
  port: 8081
dubbo:
  application:
    #注册在注册中心的名称,唯一标识,请勿重复
    name: dubbo-provider
  #单zookeeper服务:zookeeper://127.0.0.1:2181
  registry:
    address: zookeeper://127.0.0.1:2181
  #暴露服务方式
  protocol:
    id: dubbo
    #通信协议
    name: dubbo
    #暴露服务端口 (默认是20880,修改端口,不同的服务提供者端口不能重复)
    port: 20880

消费者的Yml

代码语言:javascript
复制
server:
  port: 8082


dubbo:
  application:
    #注册在注册中心的名称,唯一标识,请勿重复
    name: dubbo-consumer
  #单zookeeper服务:zookeeper://127.0.0.1:2181
  registry:
    address: zookeeper://127.0.0.1:2181

Yml配置 我并不是很熟悉,这里能保证各位能跑起来。具体详细的原理方面,会再其他文章中查看。

启动类 就注解不要忘记加 这里不放代码,直接上图

然后 一切就绪,开始 测试 我这里消费者 端口是 8082

所以 127.0.0.1:8082/a/b?name=zhangsan 只要输出 Hellozhangsan 就算完成。

铁蛋,搞定了。很多东西,我强调了很多遍。不是啰嗦,新手上手,太要命了。

特殊说明: 解决问题的光鲜,藏着磕Bug的痛苦。 万物皆入轮回,谁也躲不掉! 以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringBoot 注解+Yml配置 整合 Dubbo 、Zookeper
  • 流程 快速过一遍
  • 知道流程之后,我们再讲解一下 Zookeper、Dubbo-admin2.6.0的使用教程
  • 我们简单讲逻辑与启动流程。
  • 开码
    • 生产者代码:看下结构,只有service层哦 切记
      • 消费者结构:有Controller,service,但没有具体实现的impl类 切记
        • 说下生产者的Yml配置
          • 消费者的Yml
          相关产品与服务
          微服务引擎 TSE
          微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档