文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringBoot项目集成Dubbo

2023-08-25 08:09

关注

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.导入服务提供者所需的依赖

<dependency>            <groupId>org.apache.curatorgroupId>            <artifactId>curator-frameworkartifactId>            <version>2.8.0version>        dependency>        <dependency>            <groupId>org.apache.curatorgroupId>            <artifactId>curator-recipesartifactId>            <version>2.8.0version>        dependency>        <dependency>            <groupId>com.alibaba.spring.bootgroupId>            <artifactId>dubbo-spring-boot-starterartifactId>            <version>2.0.0version>        dependency>        <dependency>            <groupId>com.101tecgroupId>            <artifactId>zkclientartifactId>            <version>0.10version>            <exclusions>                <exclusion>                    <artifactId>slf4j-log4j12artifactId>                    <groupId>org.slf4jgroupId>                exclusion>                <exclusion>                    <artifactId>zookeeperartifactId>                    <groupId>org.apache.zookeepergroupId>                exclusion>            exclusions>        dependency>                <dependency>            <groupId>com.xinggroupId>            <artifactId>dubbo-springboot-interfacesartifactId>            <version>1.0-SNAPSHOTversion>        dependency>        <dependency>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-starter-webartifactId>        dependency>

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 {    @Override    public 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;@Controllerpublic class UserController {    @Reference(interfaceClass = UserService.class,version = "2.6.0",check = false)    private UserService userService;        @RequestMapping("/count")    @ResponseBody    public 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启动的配置,具体如下所示:
点击编辑配置,勾选允许并运行的选项即可,同时,每个不同的模块需要设置不同的端口号,否则同样是不能同时运行的!
在这里插入图片描述
最后,解决所有问题后,运行的效果如下所示:
在这里插入图片描述

来源地址:https://blog.csdn.net/qq_51447436/article/details/128071391

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯