博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dubbo整合SpringBoot
阅读量:6513 次
发布时间:2019-06-24

本文共 4747 字,大约阅读时间需要 15 分钟。

目前的dubbo已支持和springboot集成,还是之前的,这次我们通过springboot容器来实现。借此了解一下基于springboot容器启动的dubbo的配置及使用。

1. 准备工作

创建一个Maven空项目,作为项目的父工程,此工程的子项目基于Spring Boot 2.0.5 实现

在父工程的pom.xml引入之后要创建的子工程

gmall-interface
user-service-provider
order-service-consumer

可以提前看一下工程结构

下面分别来实现子工程:(子工程的实现方式都是在gmall工程下新建Module)

2. 公共API

项目中共用的接口和POJO类,代码和之前一样,这里不再展开

3. 服务提供者

工程结构如下

引入依赖

com.zang
gmall-interface
1.0-SNAPSHOT
com.alibaba.boot
dubbo-spring-boot-starter
0.2.0
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-test
test

 需要注意的是,根据jdk和Spring Boot版本的不同,dubbo-spring-boot-starter的版本需要有根据的选择

dubbo提供了@Service注解,可将类声明为提供方,省去了大量配置的麻烦

import com.alibaba.dubbo.config.annotation.Service;import com.zang.gmall.bean.UserAddress;import com.zang.gmall.service.UserService;import org.springframework.stereotype.Component;import java.util.Arrays;import java.util.List;@Service   //属于Dubbo的@Service注解,非Spring  作用:暴露服务@Componentpublic class UserServiceImpl implements UserService {    @Override    public List
getUserAddressList(String userId) { //省略}}

通过属性配置的方式设置application.properties  

#当前服务/应用的名字dubbo.application.name=user-service-provider #注册中心的协议和地址dubbo.registry.protocol=zookeeperdubbo.registry.address=127.0.0.1:2181 #通信规则(通信协议和接口)dubbo.protocol.name=dubbodubbo.protocol.port=20880 #连接监控中心dubbo.monitor.protocol=registry#开启包扫描,可替代 @EnableDubbo 注解##dubbo.scan.base-packages=com.zang.gmall

springboot容器根据配置启动服务提供方,这里需要添加 @EnableDubbo 注解

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;// 开启基于注解的dubbo功能(主要是包扫描@DubboComponentScan)// 也可以在配置文件中使用dubbo.scan.base-package来替代   @EnableDubbo@EnableDubbo@SpringBootApplicationpublic class UserServiceProviderApplication {    public static void main(String[] args) {        SpringApplication.run(UserServiceProviderApplication.class, args);    }}

提供方顺利启动

4. 服务消费者

消费者工程在初始化时设置为web项目,结构如下

引入和服务提供方同样的依赖,除此之外,添加springboot web模块的依赖。

org.springframework.boot
spring-boot-starter-web

dubbo提供了@Reference注解,可替换@Autowired注解,用于引入远程服务

import com.alibaba.dubbo.config.annotation.Reference;import com.zang.gmall.bean.UserAddress;import com.zang.gmall.service.OrderService;import com.zang.gmall.service.UserService;import org.springframework.stereotype.Service;import java.util.List;@Servicepublic class OrderServiceImpl implements OrderService {    @Reference    UserService userService;    @Override    public List
initOrder(String userId) {  //代码省略 } }

配置文件application.properties

#避免和监控中心端口冲突,设为8081端口访问server.port=8081  dubbo.application.name=order-service-consumerdubbo.registry.address=zookeeper://127.0.0.1:2181dubbo.monitor.protocol=registry

启动类同样加上@EnableDubbo注解

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@EnableDubbo@SpringBootApplicationpublic class OrderServiceConsumerApplication {    public static void main(String[] args) {        SpringApplication.run(OrderServiceConsumerApplication.class, args);    }}

为查看调用是否成功,新增控制层用于访问

import com.zang.gmall.bean.UserAddress;import com.zang.gmall.service.OrderService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import java.util.List;@Controllerpublic class OrderController {    @Autowired    OrderService orderService;    @ResponseBody   //以json格式返回    @RequestMapping("/initOrder")    public List
initOrder(@RequestParam("uid") String userId){ return orderService.initOrder(userId); }}

5. 测试调用

启动消费方,在浏览器访问

调用成功

 

附:springboot也允许引用xml文件配置,方法是在启动类中加入如下注解

 

//@EnableDubbo//引入配置信息@ImportResource(locations="classpath:provider.xml")@SpringBootApplicationpublic class UserServiceProviderApplication {//略}

 

转载地址:http://cisfo.baihongyu.com/

你可能感兴趣的文章
flask框架
查看>>
《疯狂Java讲义》学习笔记(十)异常处理
查看>>
ELK 5.x日志分析 (二) Elasticserach 5.2 安装
查看>>
一次奇怪的AP注册异常问题处理
查看>>
TableStore: 海量结构化数据分层存储方案
查看>>
java SpringUtil获取bean
查看>>
复杂度归纳--小结
查看>>
跨越企业的“中等收入陷阱”
查看>>
sys.check_constraints
查看>>
#define WIN32_LEAN_AND_MEAN 的作用
查看>>
仿余额宝数字跳动效果 TextCounter
查看>>
你必须知道的.net学习总结
查看>>
Axure8.0 网页 or App 鼠标滚动效果
查看>>
linux不能访问80端口,lunux开放80端口(本地访问不了linux文件可能是这个原因)...
查看>>
android单位转换小程序,微信小程序中rpx与rem单位转换
查看>>
ps切图教程 android,PS前端切图完整教程
查看>>
HTML如何把输入框变成必填值,required输入框为必填项
查看>>
背锅侠逆袭之路
查看>>
演示:使用协议分析器取证IPv6的报文结构
查看>>
oracle 11gr2 rac中的4种IP解说
查看>>