spring boot配置dubbo(properties)

妖狐艹你老母 2023-10-02 16:37 25阅读 0赞

spring boot与dubbo配置(properties)

dubbo和zookeeper配合使用,具体的它们之间的配置这里不说了。

一、spring boot与dubbo配置有两种方式:

1)spring boot在自己的配置文件application.properties 配置dubbo。(本篇主要说这个)
2)spring boot结合传统spring dubbo配置文件xml形式。(请看下一篇文章)

二、本篇主要说在自己配置文件里配置dubbo的步骤:

1)dubbo接口发布者配置

1.首先需要引入如下依赖:
  1. <!-- Spring Boot Dubbo 依赖-->
  2. <dependency>
  3. <groupId>io.dubbo.springboot</groupId>
  4. <artifactId>spring-boot-starter-dubbo</artifactId>
  5. <version>1.0.0</version>
  6. </dependency>
2.在application.properties 文件里配置如下内容:
  1. #dubbo提供者的别名,只是个标识
  2. spring.dubbo.application.name=provider(一般写自己的项目名称)
  3. #zk地址
  4. spring.dubbo.registry.address=zookeeper://192.168.1.160:2181
  5. #dubbo协议
  6. spring.dubbo.protocol.name=dubbo
  7. #duboo端口号
  8. spring.dubbo.protocol.port=20880
  9. #这是你要发布到dubbo的接口所在包位置
  10. spring.dubbo.scan=test.spring.dubboService
3.创建一个要发布的dubbo接口和其实现类,具体如下:
  1. package test.spring.dubboService;
  2. public interface TestDubboService {
  3. public String getName(String name);
  4. }
  5. package test.spring.dubboService.impl;
  6. import com.alibaba.dubbo.config.annotation.Service;
  7. import test.spring.dubboService.TestDubboService;
  8. @Service
  9. public class TestDubboServiceImpl implements TestDubboService {
  10. @Override
  11. public String getName(String name) {
  12. // TODO Auto-generated method stub
  13. return "姓名:"+name;
  14. }
  15. }
接口上什么都不加,但是其实现类上要加上一个注解@Service 注意该注解是com.alibaba.dubbo.config.annotation.Service 如果引入错误,发布也不会成功的。
4.如果发布的接口需要加入版本号,就可以写为这样@Service(version="1.0.0.1")
具体的包位置接口请看下图:

这里写图片描述

我在前几篇里说过,spring boot默认扫描是从启动类开始依次向下级包扫描,如果被调用方在调用的时候还没有初始化,就肯定会找不到的,上图的接口为什么会放在实现类的上层,应该就能理解了吧。
到此配置dubbo的发布方就完成了,直接运行启动类,查看dubbo接口的发布情况。如下:

这里写图片描述

2)dubbo接口消费者配置

1、首先依然要引入spring boot的依赖:
  1. <!-- Spring Boot Dubbo 依赖-->
  2. <dependency>
  3. <groupId>io.dubbo.springboot</groupId>
  4. <artifactId>spring-boot-starter-dubbo</artifactId>
  5. <version>1.0.0</version>
  6. </dependency>
2.在application.properties 文件里填些dubbo的配置:
  1. spring.dubbo.application.name=consumer-1(一般写自己的项目名称)
  2. #zk地址
  3. spring.dubbo.registry.address=zookeeper://192.168.1.160:2181
  4. #dubbo协议
  5. spring.dubbo.protocol.name=dubbo
  6. #duboo端口号
  7. spring.dubbo.protocol.port=20880
  8. #这是要扫描使用的dubbo接口所在包位置
  9. spring.dubbo.scan=test.spring.dubboService
3.由于消费者和发布者不在同一项目里,上边的test.spring.dubboService 包里,已发布接口TestDubboService 也需要复制一份到消费者这边,并且包结构都必须与发布的一样。

??注意上边,这里我说的复制,具体在项目开发里不会这么干的,比如我们是这样来做的。
??我们是项目里建了三个项目(springboot-facade、springboot-rest、springboot-service),springboot-facade里放了接口的结构,即service和bean,springboot-rest项目和springboot-service项目分别引用springboot-facade项目,将来就算别人来调用我们的接口,只要引入一下springboot-facade包,配置一下dubbo,就可以了。
当然就算webservice那种远程调用,也是需要通过wsdl去生成service结构在消费者这边。
关于单项目需要拷贝的话,具体请看下图,主要是提示一下,复制的接口在项目所处的路径必须要与发布的路径相同:
这里写图片描述

4.最后在调用的地方,我是在TestController 引入的接口,在引入的地方需要加一个注解,该注解为alibaba的 @Reference ,同理如果想加入版本号,则加上version即可,值要与发布接口的版本号对应。例如:@Reference(version="1.0.0.1"),具体如下:
  1. package test.spring.controller;
  2. import org.springframework.web.bind.annotation.RequestMapping;
  3. import org.springframework.web.bind.annotation.RequestMethod;
  4. import org.springframework.web.bind.annotation.RestController;
  5. import com.alibaba.dubbo.config.annotation.Reference;
  6. import test.spring.dubboService.TestDubboService;
  7. @RestController
  8. @RequestMapping("/springboot")
  9. public class TestController {
  10. @Reference
  11. TestDubboService testDubboService;
  12. @RequestMapping(value="abc/akf",method=RequestMethod.GET)
  13. public String abc(String name){
  14. return testDubboService.getName(name);
  15. }
  16. }
5.依次启动dubbo发布方项目和调用方项目。访问以上controller,如果这么运行下来,不出意外的话,就会报空指针异常,发布的这个接口在调用方调不到,修改如下即可。
修改后的项目结构,如下:

这里写图片描述

也就是说,需要把controller的位置放到dubboService下一级,这里就算你在引入的地方加上@Lazy 延迟加载注解也调用不到,我反正都是调整包结构解决的空指针异常。
6.再次启动项目,访问controller,就会访问成功的:

这里写图片描述

下一篇 写spring boot与传统的dubbo xml配置方式

发表评论

表情:
评论列表 (有 0 条评论,25人围观)

还没有评论,来说两句吧...

相关阅读

    相关 spring boot 配置

    什么Spring Boot?         Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架