博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot2.0完美整合Dubbo
阅读量:7251 次
发布时间:2019-06-29

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

2019已经到了,希望我跟大家一样有一个新的开始,18年有再多的烦恼和不堪,那只是过去,接下来走好脚下的路就行了。

现在微服务越来越普遍,基本现在的新项目基本都是采用微服务的方式,这里我们暂不讨论微服务的好处什么的,我们常见的微服务架构就是SpirngCloud,它整合了各种组件,让我们的开发确实变得非常的方便,除了SpringCloud之外,其实还有另外的一种架构风格,SpringBoot + Dubbo,那么我们今天就来说一下,SpringBoot如何集成Dubbo做微服务架构。

项目结构

我们想要开发一个完善的微服务架构,那么做好各模块之间的依赖关系是至为重要的,那么我们先来看下我们的项目结构。

我们构建这个项目其实主要是模拟这样一个流程,在订单模块去调用会员模块的接口。这里我就不说如何去安装zookeeper和Dubbo了,这个东西一百度一大把,如果实在有问题的话,底部留言吧,我看到会回复的。(建议大家尽量在Linux环境下去安装)

构建项目

接下来我们首先构建我们的父项目(springboot2.0-dubbo-parent),看需要引入哪些maven坐标。以下就是我们SpringBoot2.0整合Dubbo所需要的一些maven坐标,这里我并没有将整个pom文件放上来,主要太长,看着不方便,我已经把这个上传到了github上,下文有地址,可以点进去看。

org.springframework.boot
spring-boot-starter-parent
2.0.1.RELEASE
UTF-8
1.8
1.8
1.8
4.0.1
3.4.13
0.2.0
org.springframework.boot
spring-boot-starter-web
com.alibaba.boot
dubbo-spring-boot-starter
${dubbo.starter.version}
junit
junit
4.11
test
复制代码

接下来就是构建我们接口管理模块(springboot2.0-dubbo-public-api-service),所有模块的接口定义必须放在该模块下,这个模块中没有什么特别的maven坐标需要引入。

再下来构建会员接口模块(springboot2.0-dubbo-public-api-member-service),该模块是接口管理模块的子模块,这个模块中也没有什么需要特别需要引入的maven坐标。

然后我们就是来创建会员模块的实现模块(springboot2.0-dubbo-public-api-member-service-impl)了,这个模块是父项目下的一个模块,并不是存在于接口管理模块下的,不清楚可以看看上面的项目结构图。这个模块中需要引入一个maven坐标,因为他要去实现会员模块定义的接口,那么就必须把会员模块引入进来。

com.xiaotao
springboot2.0-dubbo-public-api-member-service
1.0-SNAPSHOT
复制代码

最后我们再来构建订单模块的表现层(springboot2.0-dubbo-order-web),这个模块中也是引入一个maven就好,因为它要去调用会员模块的接口,所以我们将会员模块的maven引入进来。

com.xiaotao
springboot2.0-dubbo-public-api-member-service
1.0-SNAPSHOT
复制代码

项目完善

到这里我们整个模块算是创建完了,我们剩下的就是去完善我们的项目。订单模块要调用会员模块的接口,那么我们首先应该在会员的接口模块创建一个接口。

public interface IMemberService {   // 会员接口   String getUser();}复制代码

会员接口的实现模块实现该接口

@Servicepublic class MemberServiceImpl implements IMemberService {   @Override   public String getUser() {       System.out.println("订单服务调用会员服务");       return "订单服务调用会员服务";   }}复制代码

注意:我们之前采用@Service是将我们的服务注册到容器中,但是我们现在使用的是Dubbo那么我们是将我们的服务注册到Dubbo中,所以大家这里导包的时候一定要注意。

这个模块是要启动起来的,所以我们还要写我们的启动类

@EnableDubbo@SpringBootApplicationpublic class AppMember {   public static void main(String[] args) {       SpringApplication.run(AppMember.class, args);   }}复制代码

注意:@EnableDubbo这个注解是开启Dubbo服务的,如果不加该注解,那么该服务是注册不到Dubbo中去的。

最后我们需要配置我们的dubbo,我们的dubbo将服务注册到哪里这些我们还没有进行配置,我们在springboot的resources下的application.yml中进行配置,具体配置如下

server: port: 9002dubbo: application: ###########注册到注册中心的名称############   name: member ###########采用协议和端口号################ protocol: ###########采用dubbo协议####################   name: dubbo ###########发布dubbo端口号为20880###########   port: 20881 registry: ###########注册中心地址#####################   address: zookeeper://192.168.50.128:2181spring: output:   ansi:     enabled: always复制代码

到这里我们订单这个模块就算搞定了,将会员实现这个模块启动起来,然后访问Dubbo地址(http://192.168.50.128:8080/dubbo-admin-2.6.0/),这里是我的地址,你要访问你的地址。

我们通过控制台可以看到Dubbo服务已经注册进去了。

我们再来看看Dubbo控制面板,可以看到这个服务的确已经注册进来了。

最后我们来说下,我们如果在订单模块去进行调用。首先我们在订单模块写一个接口去调用我们会员模块的接口。

@RestControllerpublic class OrderController {   @Reference   private IMemberService memberService;   @GetMapping("/orderToMember")   public String orderToMember() {       String user = memberService.getUser();       System.out.println(user);       return user;   }}复制代码

注意:@Reference 这个注解其实跟我们之前使用的@Autowired其实是一样的意思,但是我们之前将服务注册到了Dubbo中,所以我们需要从Dubbo中去取这个服务,所以就必须使用这个注解。

启动类

@SpringBootApplication@EnableDubbopublic class AppOrder {   public static void main(String[] args) {       SpringApplication.run(AppOrder.class, args);   }}复制代码

最后一步在配置下application.yml

server: port: 8001dubbo: application: ##### 注册服务的名称   name: order ##### 注册中心地址 registry:   address: zookeeper://192.168.50.128:2181 ##### 调用服务超时时间 consumer:   timeout: 5000spring: output:   ansi:     enabled: always复制代码

到这里我们整个项目就写完了,那么最后我们启动订单模块,看看是否调用成功。

最后通过测试我们可以发现,是没有问题的。我们再看看Dubbo的控制面板是否有消费者。

最后发现确实是有一个消费者的。

到这里我们SpringBoot2.0整合Dubbo就已经完成了。

项目地址:https://github.com/liangbintao/springboot2.0-dubbo

转载于:https://juejin.im/post/5c2afa6d6fb9a049e6605841

你可能感兴趣的文章
C++面向对象类的实例题目十二
查看>>
细说new与malloc的10点区别(转载)
查看>>
2017年上半年软件设计师试题-02
查看>>
Asp.net mvc 3 - JSON post & AOP
查看>>
LIS 最长递增子序列
查看>>
在 CentOS 下手工安装 Docker v1.1x
查看>>
kuangbin专题十六 KMP&&扩展KMP POJ2752 Seek the Name, Seek the Fame
查看>>
Codeforces Round #542(Div. 2) D1.Toy Train
查看>>
<meta>标签基础
查看>>
将ViewState放在Session里(转载)
查看>>
Java中三种代理模式
查看>>
基于 HTML5 WebGL 的 3D “弹力”布局
查看>>
手动配置 FreeBSD 网络
查看>>
阅读《构建之法》十一、十二、十三章之感
查看>>
线程面试题50道
查看>>
第二阶段团队项目冲刺站立会议(六)
查看>>
Android三种播放视频的方式
查看>>
Oracle ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务
查看>>
bzoj 1497 最小割模型
查看>>
AOP方法增强自身内部方法调用无效 SpringCache 例子
查看>>