spring boot配置dubbo方式(properties)

 更新时间:2023年01月03日 08:53:13   作者:茁壮成长的凌大大  
这篇文章主要介绍了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.首先需要引入如下依赖:

 <!--  Spring Boot Dubbo 依赖-->
<dependency>
  <groupId>io.dubbo.springboot</groupId>
  <artifactId>spring-boot-starter-dubbo</artifactId>
  <version>1.0.0</version>
</dependency> 

2.在application.properties 文件里配置如下内容:

#dubbo提供者的别名,只是个标识
spring.dubbo.application.name=provider
#zk地址
spring.dubbo.registry.address=zookeeper://192.168.1.160:2181
#dubbo协议
spring.dubbo.protocol.name=dubbo
#duboo端口号
spring.dubbo.protocol.port=20880
#这是你要发布到dubbo的接口所在包位置
spring.dubbo.scan=test.spring.dubboService

3.创建一个要发布的dubbo接口和其实现类,具体如下:

package test.spring.dubboService;
public interface TestDubboService {
    public String getName(String name);         
}
package test.spring.dubboService.impl;

import com.alibaba.dubbo.config.annotation.Service;
import test.spring.dubboService.TestDubboService;
@Service
public class TestDubboServiceImpl implements TestDubboService {
    @Override
    public String getName(String name) {
        // TODO Auto-generated method stub
        return "姓名:"+name;
    }
}

接口上什么都不加,但是其实现类上要加上一个注解@Service 注意该注解是com.alibaba.dubbo.config.annotation.Service 如果引入错误,发布也不会成功的。

4.如果发布的接口需要加入版本号,就可以写为这样@Service(version="1.0.0.1")

具体的包位置接口请看下图:

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

到此配置dubbo的发布方就完成了,直接运行启动类,查看dubbo接口的发布情况。如下:

2) dubbo接口消费者配置

1、首先依然要引入spring boot的依赖:

 <!--  Spring Boot Dubbo 依赖-->
<dependency>
  <groupId>io.dubbo.springboot</groupId>
  <artifactId>spring-boot-starter-dubbo</artifactId>
  <version>1.0.0</version>
</dependency> 

2.在application.properties 文件里填些dubbo的配置:

spring.dubbo.application.name=consumer-1
#zk地址
spring.dubbo.registry.address=zookeeper://192.168.1.160:2181
#dubbo协议
spring.dubbo.protocol.name=dubbo
#duboo端口号
spring.dubbo.protocol.port=20880
#这是要扫描使用的dubbo接口所在包位置
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"),具体如下:

package test.spring.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.dubbo.config.annotation.Reference;
import test.spring.dubboService.TestDubboService;
@RestController
@RequestMapping("/springboot")
public class TestController {
    @Reference
    TestDubboService testDubboService;
    @RequestMapping(value="abc/akf",method=RequestMethod.GET)
    public String abc(String name){  
        return testDubboService.getName(name);
    }
}

5.依次启动dubbo发布方项目和调用方项目。

访问以上controller,如果这么运行下来,不出意外的话,就会报空指针异常,发布的这个接口在调用方调不到,修改如下即可。

修改后的项目结构,如下:

也就是说,需要把controller的位置放到dubboService下一级,这里就算你在引入的地方加上@Lazy 延迟加载注解也调用不到,我反正都是调整包结构解决的空指针异常。

6.再次启动项目,访问controller,就会访问成功的:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Springboot工具类FileCopyUtils使用教程

    Springboot工具类FileCopyUtils使用教程

    这篇文章主要介绍了Springboot内置的工具类之FileCopyUtils的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • mybatis映射内部类的使用及注意事项说明

    mybatis映射内部类的使用及注意事项说明

    这篇文章主要介绍了mybatis映射内部类的使用及注意事项说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • idea编译器工程out目录修改方法步骤

    idea编译器工程out目录修改方法步骤

    多个工程在一个文件夹下,有时会变为所有的工程只用一个out文件夹,这时运行会出错,所以本文就来介绍一下out目录修改,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • 详解Intellij IDEA中.properties文件中文显示乱码问题的解决

    详解Intellij IDEA中.properties文件中文显示乱码问题的解决

    这篇文章主要介绍了详解Intellij IDEA中.properties文件中文显示乱码问题的解决,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • MyBatis中${} 和 #{} 有什么区别小结

    MyBatis中${} 和 #{} 有什么区别小结

    ${} 和 #{} 都是 MyBatis 中用来替换参数的,它们都可以将用户传递过来的参数,替换到 MyBatis 最终生成的 SQL 中,但它们区别却是很大的,今天通过本文介绍下MyBatis中${} 和 #{} 有什么区别,感兴趣的朋友跟随小编一起看看吧
    2022-11-11
  • Spring mvc整合mybatis(crud+分页插件)操作mysql

    Spring mvc整合mybatis(crud+分页插件)操作mysql

    这篇文章主要介绍了Spring mvc整合mybatis(crud+分页插件)操作mysql的步骤详解,需要的朋友可以参考下
    2017-04-04
  • SpringBoot中的异步执行方法详解

    SpringBoot中的异步执行方法详解

    这篇文章主要介绍了SpringBoot中的异步执行方法详解,ThreadpoolTaskExecutor不需要手动的创建当前线程池,但往往我们还是会手动指定,具体原因看源码就可以自有判断,需要的朋友可以参考下
    2023-10-10
  • MyBatis核心配置文件深入分析

    MyBatis核心配置文件深入分析

    这篇文章主要介绍了MyBatis核心配置文件,MyBatis的前身就是iBatis,iBatis本是由Clinton Begin开发,后来捐给Apache基金会,成立了iBatis开源项目。2010年5月该项目由Apahce基金会迁移到了Google Code,并且改名为MyBatis
    2022-12-12
  • SpringBoot启动自动终止也不报错的原因及解决

    SpringBoot启动自动终止也不报错的原因及解决

    这篇文章主要介绍了SpringBoot启动自动终止也不报错的原因及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • springboot整合websocket实现群聊思路代码详解

    springboot整合websocket实现群聊思路代码详解

    通过springboot引入websocket,实现群聊,通过在线websocket测试进行展示。本文重点给大家介绍springboot整合websocket实现群聊功能,代码超级简单,感兴趣的朋友跟随小编一起学习吧
    2021-05-05

最新评论