Dubbo与SpringBoot整合流程(从实例入手,附代码下载)
场景
Dubbo环境搭建-管理控制台dubbo-admin实现服务监控:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103624846
Dubbo搭建HelloWorld-搭建服务提供者与服务消费者并完成远程调用(附代码下载):
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103675259
在上面搭建好Dubbo的HelloWorld后,将其与Springboot项目进行整合。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
还是采用上面用户服务提供者和订单服务消费者的模式。
将公共的接口和实体类抽离出来,放在gmall-interface中。
新建服务提供者
打开Eclipse-新建一个Spring Starter Project
点击Next,输入相关包名与应用名
点击next,这里新建的是服务提供者,只需要简单的SpringBoot项目,不用选择Web依赖,直接点击Next,
注意这里的SpringBoot的版本为2.2.2,在后面选择Dubbo-starter依赖时有版本对应关系。
建完之后的目录为
然后打开pom.xml,添加上面公共接口的依赖以及dubbo-starter的依赖。
引入公共接口依赖,具体实现参照上面博客
<dependency>
<groupId>com.badao.gmall</groupId>
<artifactId>gmall-interface</artifactId>
<version>0.0.-SNAPSHOT</version>
</dependency>
引入dubbo-starter以及相关依赖
按照其官方指示:https://github.com/apache/dubbo-spring-boot-project
添加相应的dubbo的依赖和dubbo-starter的依赖
完整pom.xml代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2..RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.badao</groupId>
<artifactId>boot-user-service-provider</artifactId>
<version>0.0.-SNAPSHOT</version>
<name>boot-user-service-provider</name>
<description>Demo project for Spring Boot</description> <properties>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>com.badao.gmall</groupId>
<artifactId>gmall-interface</artifactId>
<version>0.0.-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 引入dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.</version>
</dependency>
<!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端端 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2..RELEASE</version>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>
参考上面博客搭建服务提供者时配置信息是在provider.xml中进行配置,在这里要将其配置在application.properties中。
dubbo.application.name=user-service-provider
dubbo.registry.address=127.0.0.1:
dubbo.registry.protocol=zookeeper
#
dubbo.protocol.name=dubbo
dubbo.protocol.port=
#
dubbo.monitor.protocol=registry
dubbo.scan.base-packages=com.badao.gmall
具体配置信息作用见上面博客。或者参照其官方指示
然后将上面博客搭建好的serviceImpl复制到springBoot项目中
package com.badao.gmall.service.impl; import java.util.Arrays;
import java.util.List; import org.springframework.stereotype.Component; import com.alibaba.dubbo.config.annotation.Service;
import com.badao.gmall.bean.UserAddress;
import com.badao.gmall.service.UserService; @Service //暴露服务
@Component
public class UserServiceImpl implements UserService { public List<UserAddress> getUserAddressList(String userId) { // TODO Auto-generated method stub
UserAddress address1 = new UserAddress(, "霸道流氓气质", "", "李老师", "", "Y");
UserAddress address2 = new UserAddress(, "公众号:霸道的程序猿)", "", "王老师", "", "N");
return Arrays.asList(address1,address2);
} }
注意的是之前在上面搭建的spring项目中使用的@Service注解是spring的注解,而这里使用的dubbo的注解
import com.alibaba.dubbo.config.annotation.Service;
为了区分spring的@Service注解,所以使用spring的@Componment注解。
dubbo的@Service注解的作用是指定要暴露的服务,让别人能引用。其作用就是上面在provider.xml中使用dubbo-service标签
暴露服务一样
然后在SpringBoot的主程序中添加注解@EnableDubbo时支持dubbo
package com.badao.gmall; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo; @EnableDubbo //开启基于注解的dubbo功能
@SpringBootApplication
public class BootUserServiceProviderApplication { public static void main(String[] args) {
SpringApplication.run(BootUserServiceProviderApplication.class, args);
} }
启动提供者主程序
使用上面博客中搭建好的管理平台可见服务提供者搭建成功
新建服务消费者
参照上面搭建服务提供者的流程,新建服务消费者
此时添加web依赖
此时的pom.xml同样引入公共接口依赖与dubbo和dubbo-starter相关依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2..RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.badao</groupId>
<artifactId>boot-order-service-consumer</artifactId>
<version>0.0.-SNAPSHOT</version>
<name>boot-order-service-consumer</name>
<description>Demo project for Spring Boot</description> <properties>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.badao.gmall</groupId>
<artifactId>gmall-interface</artifactId>
<version>0.0.-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 引入dubbo -->
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.</version>
</dependency>
<!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.</version>
</dependency>
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2..RELEASE</version>
</dependency> </dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>
然后打开其配置文件进行相关配置
server.port= dubbo.application.name=boot-order-service-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.monitor.protocol=registry
注意:这里修改端口号是因为8080已经被dubbo-monitor所占用,
具体配置的作用参照上面博客。
然后将服务消费者的接口实现复制过来
package com.badao.gmall.service.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.alibaba.dubbo.config.annotation.Reference;
import com.badao.gmall.bean.UserAddress;
import com.badao.gmall.service.OrderService;
import com.badao.gmall.service.UserService; /**
* 1、将服务提供者注册到注册中心(暴露服务)
* 1)、导入dubbo依赖(2.6.2)\操作zookeeper的客户端(curator)
* 2)、配置服务提供者
*
* 2、让服务消费者去注册中心订阅服务提供者的服务地址
* @author badao
*
*/
@Service
public class OrderServiceImpl implements OrderService { //@Autowired
@Reference
UserService userService;
public List<UserAddress> initOrder(String userId) {
// TODO Auto-generated method stub
System.out.println("用户id:"+userId);
//1、查询用户的收货地址
List<UserAddress> addressList = userService.getUserAddressList(userId);
for (UserAddress userAddress : addressList) {
System.out.println(userAddress.getUserAddress());
}
return addressList;
} }
注意:这里的自动注入的@Autowired注解要修改为dubbo的@Reference,其作用是能远程引用userService的服务,自己能从服务注册中心发现。
其作用相当于之前的consumer.xml中使用dubbo:reference标签声明需要调用的远程服务接口,即生成远程服务代理。
在包下新建controller包以及OrderController类
package com.badao.gmall.controller; import java.util.List; 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 com.badao.gmall.bean.UserAddress;
import com.badao.gmall.service.OrderService; @Controller
public class OrderController { @Autowired
OrderService orderService; @ResponseBody
@RequestMapping("/initOrder")
public List<UserAddress> initOrder(@RequestParam("uid")String userId) {
return orderService.initOrder(userId);
} }
然后修改主程序开启dubbo支持
package com.badao.gmall; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo; @EnableDubbo
@SpringBootApplication
public class BootOrderServiceConsumerApplication { public static void main(String[] args) {
SpringApplication.run(BootOrderServiceConsumerApplication.class, args);
} }
启动应用主程序
此时在管理平台就会监控到服务消费者
然后打开浏览器,输入:localhost:8081/initOrder?uid=1
示例代码下载
https://download.csdn.net/download/BADAO_LIUMANG_QIZHI/12052055
Dubbo与SpringBoot整合流程(从实例入手,附代码下载)的更多相关文章
- Python进阶:函数式编程实例(附代码)
Python进阶:函数式编程实例(附代码) 上篇文章"几个小例子告诉你, 一行Python代码能干哪些事 -- 知乎专栏"中用到了一些列表解析.生成器.map.filter.lam ...
- Dubbo搭建HelloWorld-搭建服务提供者与服务消费者并完成远程调用(附代码下载)
场景 Dubbo简介与基本概念: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103555224 Dubbo环境搭建-ZooKe ...
- SpringBoot+MyBatisPlus+ElementUI一步一步搭建前后端分离的项目(附代码下载)
场景 一步一步教你在IEDA中快速搭建SpringBoot项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/87688277 ...
- 从实例一步一步入门学习SpringCloud的Eureka、Ribbon、Feign、熔断器、Zuul的简单使用(附代码下载)
场景 SpringCloud -创建统一的依赖管理: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102530574 Sprin ...
- SpringBoot 整合SpringBatch实际项目改造
SpringBoot整合SpringBatch项目,已将代码开源至github,访问地址:https://github.com/cmlbeliever/SpringBatch 欢迎star or fo ...
- 10分钟进阶SpringBoot - 05. 数据访问之JDBC(附加源码分析+代码下载)
10分钟进阶SpringBoot - 05. 数据访问之JDBC 代码下载:https://github.com/Jackson0714/study-spring-boot.git 一.JDBC是什么 ...
- SpringBoot 整合使用dubbo
这里主要是按照teaey作者的spring-boot-starter-dubbo框架进行一些变化的使用 依赖包: <dependency> <groupId>com.aliba ...
- 【java框架】SpringBoot(5)--SpringBoot整合分布式Dubbo+Zookeeper
1.理论概述 1.1.分布式 分布式系统是若干独立计算机的集合,这些计算机对于用户来讲就像单个系统. 由多个系统集成成一个整体,提供多个功能,组合成一个板块,用户在使用上看起来是一个服务.(比如淘宝网 ...
- dubbo学习实践(4)之Springboot整合Dubbo及Hystrix服务熔断降级
1. springboot整合dubbo 在provider端,添加maven引入,修改pom.xml文件 引入springboot,版本:2.3.2.RELEASE,dubbo(org.apache ...
随机推荐
- 【译】高级T-SQL进阶系列 (七)【上篇】:使用排序函数对数据进行排序
[译注:此文为翻译,由于本人水平所限,疏漏在所难免,欢迎探讨指正] 原文链接:传送门. 什么是排序函数(Ranking Functions)? 排序函数基于一组记录的集合返回一个排序值.一个排序值其实 ...
- 模板元编程(Template metaprogramming)
https://en.wikipedia.org/wiki/Template_metaprogramming 没看懂...只知道了模板元编程的代码是在编译期运行的... 敲了2个例子: 1. #inc ...
- python实现基于百度路径规划接口的坐标对获取两点驾车距离的计算
今天为大家介绍一种通过python实现坐标对间距离数据的获取方法.接口采用百度开发的路径规划接口. 1.调用接口: 接口:(传入起点坐标串,结束坐标串:ak值需要注册百度开发者) 接口详细说明 htt ...
- 实验1 GIT代码版本管理
(一)实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2) 熟练掌握git的基本指令和分支管理指令: (二)实验内容: 1)安装git 2)初始配置git ,git init git sta ...
- Python:json 模块
字符串转dict.list data = "[{....},{...},...]" list_data = json.loads(data) dict.list转字符串 list ...
- HDU1285-确定比赛名次(拓扑+优先队列)
对于拓扑排序,每次能入队的只有入度为0的点,所以用优先队列即可. 以及,第一组数据日常卡OJ,这组数据跳了一个点,我的程序这个版本也过不了(其实写了另一个版的),稍微改改更正确. #include & ...
- web.xml中的welcome-file-list标签作用
welcome-file-list是一个配置在web.xml中的一个欢迎页,用于当用户在url中输入项目名称或者输入web容器url(如http://localhost:8080/)时直接跳转的页面. ...
- 吴裕雄 python 神经网络——TensorFlow训练神经网络:花瓣识别
import os import glob import os.path import numpy as np import tensorflow as tf from tensorflow.pyth ...
- Vue父组件主动获取子组件的数据和方法
Vue父组件主动获取子组件的数据和方法 https://www.jianshu.com/p/bf88fc809131
- Manacher算法--O(n)回文子串算法
转自:http://blog.csdn.net/ggggiqnypgjg/article/details/6645824 O(n)回文子串算法 注:转载的这篇文章,我发现下面那个源代码有点bug... ...