SpringBoot项目集成Dubbo
创始人
2024-02-21 07:30:00

1.环境搭建

为整合Dubbo之前,我们所写的项目都是单一应用架构,只需要一个应用,将所有功能都部署在一起,在应用内部是控制层调用业务层,业务层调用数据持久层;如今,整合Dubbo后,我们可以将应用程序的不同功能单元进行拆分(将控制层、业务层以及数据持久层拆分),各个服务之间通过RPC通信!
下面,我们就开始在SpringBoot项目中集成Dubbo;首先我们需要创建一个空项目,在空项目中创建三个模块,分别定义工程。服务提供者以及服务消费者!
接口工程:存放pojo实体和业务接口;
服务提供者: 存放业务接口的实现类并将服务暴露到注册中心,并调用数据持久层;
服务消费者:处理浏览器客户端发送的请求,从注册中心调用服务提供者所提供的服务。

1.创建一个空项目

打开IDEA,单击文件,选择新建,点击项目,最后选择空项目,具体如下所示:
在这里插入图片描述

2.创建接口工程模块

由于接口工程只需要存放一个pojo实体类和抽象的业务接口,因此创建一个普通的Maven项目即可!
打开IDEA,单击文件,选择新建,点击新模块。具体如下所示:
在这里插入图片描述
紧接着按照自己的方式选择模块名称和位置,具体如下所示:最后点击完成!
在这里插入图片描述

3.创建服务提供者模块

创建服务提供者需要依托一个SpringBoot项目,因此我们首先要创建一个SpringBoot项目。具体步骤如下,
打开IDEA,单击文件,选择新建,点击新模块。具体如下所示:
在这里插入图片描述

点击下一步后选择Spring Web依赖即可完成创建!

4.创建服务消费者模块

服务消费者模块与服务提供者模块大同小异,按照创建服务提供者的方式创建即可,更换一下服务消费者的模块名称即可完成创建,具体如下所示:
在这里插入图片描述

2.接口工程中抽象接口的编写

在dubbo-springboot-interfaces模块中创建一个UserService接口,具体如下所示:

public interface UserService {int getCount();//获取当前网站在线人数
}

3.服务提供者模块的编写

1.导入服务提供者所需的依赖

org.apache.curatorcurator-framework2.8.0org.apache.curatorcurator-recipes2.8.0
com.alibaba.spring.bootdubbo-spring-boot-starter2.0.0com.101teczkclient0.10slf4j-log4j12org.slf4jzookeeperorg.apache.zookeepercom.xingdubbo-springboot-interfaces1.0-SNAPSHOTorg.springframework.bootspring-boot-starter-web

2.编写服务提供者配置文件

这里需要注意,spring.dubbo.server=true代表该模块是服务的提供者,spring.dubbo.registry配置的是zookeeper的IP和端口,因此启动项目的前提是要在Linux系统中开启zookeeper!

# 应用名称
spring.application.name=dubbo-springboot-provider
# 应用服务 WEB 访问端口
server.port=8081
# 设置上下文根
server.servlet.context-path=/
#dubbo配置
spring.dubbo.server=true
# 设置注册中心
spring.dubbo.registry=zookeeper://IP:2181

3.实现接口工程中的抽象接口

这里需要注意的是,我们需要导入的@Service是com.alibaba.dubbo.config.annotation包下的,同时需要使用@Component将此类装入spring容器中,这里并未调用真实的数据持久层,只是模拟调用!

package com.xing.dubbospringbootprovider.service.impl;import com.alibaba.dubbo.config.annotation.Service;
import com.xing.dubbospringbootconsumer.service.UserService;
import org.springframework.stereotype.Component;@Component
@Service(interfaceClass = UserService.class,version = "2.6.0",timeout = 15000)
public class UserServiceImpl implements UserService {@Overridepublic int getCount() {//调用数据持久层return 1024;}
}

4.在服务提供者主启动类上开启Dubbo配置

在模块主启动类上加上@EnableDubboConfiguration即可以开启开启dubbo配置!

package com.xing.dubbospringbootprovider;import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@EnableDubboConfiguration //开启dubbo配置
public class DubboSpringbootProviderApplication {public static void main(String[] args) {SpringApplication.run(DubboSpringbootProviderApplication.class, args);}
}

3.服务消费者模块的编写

1.导入服务消费者所需的依赖

这里所需要的依赖与服务提供者相同,这里就不过多展示了,有需要的可以拷贝服务提供者所展示的依赖。

2.编写服务消费者配置文件

这里配置文件中的IP需要更换为自己购买的阿里云服务器的IP;

# 应用名称
spring.application.name=dubbo-springboot-consumer
# 应用服务 WEB 访问端口
server.port=8083
# 配置上下文根
server.servlet.context-path=/
# 配置注册中心
spring.dubbo.registry=zookeeper://IP:2181

3.编写控制层代码

消费者使用@Reference(interfaceClass = UserService.class,version = “2.6.0”,check = false)注解,从注册中心调用服务提供者所提供的服务。

package com.xing.dubbospringbootconsumer.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.xing.dubbospringbootconsumer.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class UserController {@Reference(interfaceClass = UserService.class,version = "2.6.0",check = false)private UserService userService;@RequestMapping("/count")@ResponseBodypublic String getCount(){int count=userService.getCount();return "当前在线的人数为:"+count;}
}

4.在服务消费者主启动类上开启Dubbo配置

package com.xing.dubbospringbootconsumer;import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@EnableDubboConfiguration //开启Dubbo配置
public class DubboSpringbootConsumerApplication {public static void main(String[] args) {SpringApplication.run(DubboSpringbootConsumerApplication.class, args);}
}

4.开启zookeeper服务

这里就不详细讲解如何安装zookeeper了,有需要的读者可以自己去网上下载并配置环境!

cd /opt/zookeeper/apache-zookeeper-3.5.6-bin/bin/
# 启动zookeeper
./zkServer.sh start

可以通过./zkServer.sh status查看是否启动成功,出现以下数据即启动成功!
在这里插入图片描述

5.修改IDEA的环境配置

这里需要注意,我们创建的模块,默认的目标字节码版本是5,我们需要修改为8,否则可能会出现内部Java编译器错误;
在这里插入图片描述
同时,如果启动项目发现出现Class path contains multiple SLF4J bindings.的问题,可以参考我使用maven Helper解决问题的办法,解决问题的文档

最后,如果需要同时启动多个SpringBoot实例,这里需要修改IDEA启动的配置,具体如下所示:
点击编辑配置,勾选允许并运行的选项即可,同时,每个不同的模块需要设置不同的端口号,否则同样是不能同时运行的!
在这里插入图片描述
最后,解决所有问题后,运行的效果如下所示:
在这里插入图片描述

相关内容

热门资讯

【看表情包学Linux】进程地...   🤣 爆笑教程 👉 《看表情包学Linux》👈 猛...
吉字五行及吉凶 吉字五行中代表... 五行解析在文化中,五行是非常重要的概念之一,在这里解析一下五行对于人们生活的影响。首先,金属代表的是...
月老姻缘灵签内容详解大全 月老... 月老灵签 姻缘签44签 求解签君尔目下之人。本是可心满意足之人。焉知后来之人。一个比一个更美好。就此...
六爻排盘蛇 六爻排盘预测绝招 ... 六爻排盘结果怎么看纳甲六爻在线排盘姓名:出生年:1981性别:男占事:起卦方式:手动摇卦公历时间:2...
吉凶由情绪决定 每日吉凶 每月... 情绪的力量情绪是我们生活中一个重要的组成部分。我们每天都会通过不同的方式感受到情绪的存在,而情绪的质...
吉凶悔吝的解释是什么 风水形势... 吉凶悔吝的解释是什么从古至今,人们对于吉凶悔吝都有着不同的看法。所谓吉,是指好的运气,让人们沾沾自喜...
如何看每日生肖运势 每日生肖运... 背景说明每个人都希望自己的运势越来越好,而对于人来说,生肖运势是一个参考价值很高的判断标准。按照传统...
最准观音灵签21签解签 观音灵... 观音灵签21签解签-遵医嘱,健康长寿观音精神签证是中国民间宗教信仰的重要形式,也是一种广泛流传的祈祷...
梦见红裤子被水冲走 梦见河里洗... 梦见红裤子被水冲走红裤子是一种比较鲜艳的颜色,在梦中出现可能代表着某种情绪或状态。而被水冲走则更加具...
十二星座对象配对 12星座最佳... 12星座配偶标准白羊座:温柔善良的人乐观单纯的白羊座在恋爱时喜欢另一半无条件的宠爱自己,另一半对自己...
带水又带土的名字女孩名字有哪些... 含水和土的字有哪些含水的字:淦、澜、浸、泼、滴、没、汪、沸、鸿、沔、浩、渣、溢、潺江、注、漭、淬、澧...
六爻失物卦 在线占卜失物 六爻... 六爻占卜 寻找失物公历起卦时间:2012年12月24日9时44分(按公历时间起卦)农历:仁辰年十一月...
天网今日生肖运势 每日特吉生肖... 天网今日生肖运势天网今日,十二生肖依旧是重要的关键词之一。根据传统文化和民间信仰,每个人都属于一个生...
六爻代表书籍 六爻预测好的书籍... 学六爻的书籍那些比较经典,最好适合初学者的。从古至今六爻类的书流传于世的非常少,六爻类最经典的几本书...
十二星座女生专属花卉 小葩画1... 狮子座的女生喜欢什么样的花1.狮子座的女生喜欢鲜艳、华丽、高贵的花。2.狮子座的女生通常有着自信、热...
客厅风水禁忌及化解 客厅推拉门... 客厅风水禁忌及解决方案客厅是家庭中最重要的空间之一,也是最容易受到风水影响的空间之一。在客厅里,我们...
吉凶参半牛兔在含义 牛兔相冲到... 吉凶参半牛兔在啥意思吉凶参半牛兔在是指属牛的和属兔的结婚以后生活吉凶各一半。丑牛与子鼠六合,因此最宜...
各生肖属相的车牌号码吉凶对照表... 十二生肖与车牌号的佳搭配 十二生肖车牌号吉凶对照表通常每个人的黄道十二宫都会影响车牌号码的运行模式,...
客厅西部尖角的风水 客厅有棱角... 客厅西南角最好的风水是什么?客厅西南角最好的风水是什么?客厅西南角最好的风水是什么?房子的方形风水是...
带昶字的女孩名字 带滢的女孩名... 长字命名的寓意及意义长字命名的寓意和意义是正直、坚强、努力、阳光、前途似景、忠诚。长是一个通用词。长...
六壬怎么算命 六壬掐指神算金口... 什么是六仁?刘仁是中国古代的算命方法,起源于汉代,是中国道教学派的经典之一。刘仁包括六个神:天乙、天...
四月二十九生肖运势 十二生肖鸡... 女1993农历四月二十九早上十点生辰八字是什么如何出生时间:公历 1993年 6月 18日 10点本...
带心字的游戏女孩名字大全集 游... 2020男孩怎么起名有内涵 带心字的男孩名字大全心繁体:心起名五行:金姓名学笔画:4画简体笔画:4画...
八字鬼谷子算命 鬼谷子精髓50... 什么是八字鬼谷子算命?八字鬼谷子算命,又称李静算命,是中国传统的民间算命方式。八字鬼谷子算命起源于六...
十二星座下个月的运势女生 十二... 白羊座下个月的运势女生白羊座女生本身就充满了无限活力和热情,下个月的运势也不会让你失望。职业上可能会...
号令天下手机吉凶预测 号令天下... 手机号怎么算吉凶?用最后四个手机号码除以80,然后减去整数部分(只留小数),再乘以80,就会得到一个...
命理十二生肖今年运势 明天运势... 命理十二生肖今年运势今年每年都有不同的转瞬即逝的岁月。对于不同的黄道十二宫来说,它每年都有自己独特的...
八字长生好吗 八字中帝旺到长生... 八字日坐长生一定富吗丁火曰元生于未月,余气通根,年支丙火也能助身,但于上两透旺食,生财耗身过甚,故命...
带日的名字女孩名字大全 起名带... 日字旁边的女孩名字大全日字旁边的女孩名字推荐1、诗晗、慧曦、Xi、仲晴2、小芸、小娟、会晴、若昕、敏...
号令天下固话号码测吉凶 查电话... 周易81测手机号码吉凶,号令天下手机号码测吉凶提起周易81测手机号码吉凶,大家都知道,有人问天下手机...