欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Springboot整合dubbo:搭建一个springboot+dubbo的微服务

时间:2023-07-16

Apache Dubbo 是一款高性能、轻量级的开源服务框架,提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维。是一款国内使用较多的SOA架构开发的中间件,其主要由三个部分组成:生产者,消费者,注册中心。注册中心一般使用的是zookeeper。
现在从头来捋一捋如何搭建一个springboot+dubbo项目。
首先,使用创建一个springboot项目,我这里使用的是SpringToolSuite4,这也是Eclipse工具不过整合了Springboot的常用的一些插件,跟IDEA类似。
由于dubbo的注册中心是用的zookeeper,所以首先需要去官网下载一个,这里用的是zookeeper-3.4.13,下载好了需要解压该文件,然后进入conf目录,将zoo_sample.cfg文件复制并重命名为zoo.cfg,在进入bin目录双击zkServer.cmd


第二步:构建Springboot项目,由于dubbo的生产者和消费者都会引用类的接口,为了方便会把接口抽成一个公用的模块,所以这里我用创建的是Maven project。结构图如下

第三步:引入Springboot集成dubbo的依赖,生产者和消费者模块都用引用

// 父级pom 4.0.0 com.zhouhx.dubbo dubbo-demo 0.0.1-SNAPSHOT dubbo-demo 入门 0.2.0 5.7.9 2.5.3 0.0.1-SNAPSHOT 1.8 UTF-8 UTF-8 org.springframework.boot spring-boot-dependencies ${spring-boot.version} pom import cn.hutool hutool-all ${hutool.version} com.alibaba.boot dubbo-spring-boot-starter ${dubbo.version} com.zhouhx.dubbo dubbo-common ${project.version} pom dubbo-common dubbo-producer dubbo-consumer org.apache.maven.plugins maven-compiler-plugin ${java.version} ${java.version} ${project.build.sourceEncoding}

// 生产者 4.0.0 com.zhouhx.dubbo dubbo-demo 0.0.1-SNAPSHOT dubbo-producer producer 生产者 com.zhouhx.dubbo dubbo-common org.springframework.boot spring-boot-starter com.alibaba.boot dubbo-spring-boot-starter org.springframework.boot spring-boot-maven-plugin var foo = 'bar';

// 消费者 4.0.0 com.zhouhx.dubbo dubbo-demo 0.0.1-SNAPSHOT dubbo-consumer consumer 消费者 com.zhouhx.dubbo dubbo-common org.springframework.bootspring-boot-starter-web org.springframework.boot spring-boot-starter com.alibaba.boot dubbo-spring-boot-starter

第四步:创建公用的接口和实体类

// 公用接口public interface UserService {public User getUserInfo();}//实体类public class User implements Serializable{private static final long serialVersionUID = -3304178237669079610L;private String name;private int age;private String sex;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public User(String name, int age, String sex) {super();this.name = name;this.age = age;this.sex = sex;}public User() {super();}

第五步:实现其接口并发布服务

//实现接口并发布import org.springframework.stereotype.Component;import com.alibaba.dubbo.common.logger.Logger;import com.alibaba.dubbo.common.logger.LoggerFactory;import com.alibaba.dubbo.config.annotation.Service;import com.zhouhx.api.UserService;import com.zhouhx.entity.User;@Service@Componentpublic class UserServiceImpl implements UserService {private static Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);public User getUserInfo() {logger.info("正在开始调用Dubbo服务。。。。。");return new User("张三",15,"男");}

注意:注解不是用spring的service注解,是 com.alibaba.dubbo.config.annotation.Service

// 在springboot程序入口出启用dubbo服务import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;@SpringBootApplication@EnableDubbopublic class DubboApplication {public static void main(String[] args) {SpringApplication.run(DubboApplication.class, args);}}

第六步:修改application.properties配置文件,添加dubbo配置

server.port=8001#应用名dubbo.application.name=dubbo-producer#zookeeper地址dubbo.registry.address=127.0.0.1:2181#指定注册中心类型dubbo.registry.protocol=zookeeper#传入协议的名称dubbo.protocol.name=dubbo#dubbo服务暴露的端口,可自定义dubbo.protocol.port=20888

这里生产者模块就是实现完成,启动springboot,就能提供一个UserService的接口
第七步:消费者模块调用已经发布的服务

import org.springframework.stereotype.Service;import com.alibaba.dubbo.common.logger.Logger;import com.alibaba.dubbo.common.logger.LoggerFactory;import com.alibaba.dubbo.config.annotation.Reference;import com.zhouhx.api.UserService;import com.zhouhx.demo.service.ConsumerService;import com.zhouhx.entity.User;@Servicepublic class ConsumerServiceImpl implements ConsumerService {private static Logger logger = LoggerFactory.getLogger(ConsumerServiceImpl.class);@ReferenceUserService userService;@Overridepublic String getUserInfo() {logger.debug("dubbo远程调用开始。。。。");User userInfo = userService.getUserInfo();logger.debug("dubbo远程调用结束,res="+userInfo.toString());return "当前用户信息"+userInfo == null ? "空":userInfo.toString();}

dubbo的远程调用是用的@Reference注解,不是spring的@Autowired
第八步:测试
为了方便测试,这里我用了springboot的web的模块

@RestControllerpublic class Publish {@AutowiredConsumerService consumerService;@GetMapping("/demo")public String getUserInfo() {return consumerService.getUserInfo();}}

页面上输入http://127.0.0.1:8002/demo,页面上显示User [name=张三, age=15, sex=男]

再看消费者模块打印的日志

说明接口已经远程调用成功!
dubbo还提供了一个dubbo-admin控制台,将项目用maven打包成jar包
启用后如下图

项目gitee地址:dubbo-demo
打包好的dubbo-admin-0.4,开箱即用

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。