SpringBoot 注解+Yml配置 整合 Dubbo 、Zookeper
首先 要知道Dubbo、Zookeper依赖知道是什么
<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下去。再配置文件 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 的依赖
<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
public interface AService {
String sayhello(String name);
}
AServiceImpl
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
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接口
public interface AService {
String sayhello(String name);
}
代码基本算写完。然后Dubbo不知道往哪里注册啊。
说下生产者的Yml配置
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
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 就算完成。
铁蛋,搞定了。很多东西,我强调了很多遍。不是啰嗦,新手上手,太要命了。
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
评论(0)