手把手教你Dubbo与SpringBoot常用两种方式整合
一、Dubbo整合SpringBoot的方式(1)

1)直奔主题,方式一:
pom.xml中引入dubbo-starter依赖,在application.properties配置属性,使用@Service【暴露服务】使用@Reference【引用服务】,选取的是application.properties+部分注解的方式来完成。
2)创建ego_interface接口模块,被提供者和消费者所使用
此模块目录结构如下:

1、实体类UserAddress
package com.sxt.domain;
import java.io.Serializable; //实体类 必须实现序列化
public class UserAddress implements Serializable { private Integer id;
private String address;
private String userId; public UserAddress() {
}
public UserAddress(Integer id, String address, String userId) {
this.id = id;
this.address = address;
this.userId = userId;
} public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
}
2、提供者接口UserService
package com.sxt.service;
import com.sxt.domain.UserAddress;
import java.util.List;
//提供者接口
public interface UserService { //根据用户id查询用户地址
public List<UserAddress> getUserAddressByUserId(String userId);
}
3、消费者接口OrderService
package com.sxt.service;
import com.sxt.domain.UserAddress;
import java.util.List;
//消费者接口
public interface OrderService{ //初始化订单
public List<UserAddress> initOrder(String userId);
}
3)创建boot-ego-user-service-provider提供者模块
此模块目录结构如下(config是第二种方式用的,此处请先忽略):




4)修改pom.xml加入依赖
添部分关键依赖(其余自动生成):

<!--加入对ego_interface依赖-->
<!--这个是上面第二步创建的你所要使用的接口类的依赖-->
<dependency>
<groupId>com.sxt</groupId>
<artifactId>ego_interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!-- 使用zk 做注册中心,Dubbo 需要的依赖 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
1、编写UserServiceImpl
package com.sxt.service.impl; import com.sxt.domain.UserAddress;
import com.sxt.service.UserService;
import org.apache.dubbo.config.annotation.Service;
import java.util.ArrayList;
import java.util.List; //此处service是apache.dubbo的 代替了创建和暴露对象
@Service
public class UserServiceImpl implements UserService { public static List<UserAddress> address=new ArrayList<>(); static {
address.add(new UserAddress(1, "天安门广场", "bj"));
address.add(new UserAddress(2, "上海迪士尼", "sh"));
} @Override
public List<UserAddress> getUserAddressByUserId(String userId) {
return address;
}
}
2、修改application.properties
#application-name 本模块名字
dubbo.application.name=boot-ego-user-service-provider
#registry 指定注册中心地址(www.lcbxiuxiu.tech是我阿里云地址 请换成你自己的服务器地址)
dubbo.registry.address=zookeeper://www.lcbxiuxiu.tech:2181
#dubbo protocol 指定dubbo协议 将服务暴露在20880端口
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
3、修改启动类并启动
@SpringBootApplication
//此注解为了自动开启dubbo
@EnableDubbo
public class BootEgoUserServiceProviderApplication {
public static void main(String[] args) {
SpringApplication.run(BootEgoUserServiceProviderApplication.class, args);
}
}
4、启动成功后画面在远程dubbo访问

5)创建boot-ego-order-service-comsumer消费者模块
此模块目录结构如下(config是第二种方式用的,此处请先忽略):





1、修改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.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.sxt</groupId>
<artifactId>boot-ego-order-service-comsumer</artifactId>
<version>1.0</version>
<name>boot-ego-order-service-comsumer</name>
<description>springboot集成dubbo的消费者</description> <properties>
<java.version>1.8</java.version>
<dubbo.version>2.7.3</dubbo.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</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>
<!--加入对ego_interface依赖-->
<dependency>
<groupId>com.sxt</groupId>
<artifactId>ego_interface</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency> <!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!-- 使用zk 做注册中心,Dubbo 需要的依赖 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency> </dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>
2、创建OrderServiceImpl
package com.sxt.service.impl; import com.sxt.domain.UserAddress;
import com.sxt.service.OrderService;
import com.sxt.service.UserService;
import org.springframework.stereotype.Service;
import org.apache.dubbo.config.annotation.Reference; import java.util.List; @Service //此处是spring的 帮你自动创建对象与注入
public class OrderServiceImpl implements OrderService { @Reference //此处是apache.dubbo 代替引入远程对象
private UserService userService; public void setUserService(UserService userService) {
this.userService = userService;
} @Override
public List<UserAddress> initOrder(String userId) {
return this.userService.getUserAddressByUserId(userId);
} }
3、修改启动类并启动
package com.sxt; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
@EnableDubbo
public class BootEgoOrderServiceComsumerApplication { public static void main(String[] args) {
SpringApplication.run(BootEgoOrderServiceComsumerApplication.class, args);
}
}
4、在测试类中测试
package com.sxt; import com.sxt.domain.UserAddress;
import com.sxt.service.OrderService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import java.io.IOException;
import java.util.List; @SpringBootTest
class BootEgoOrderServiceComsumerApplicationTests { @Autowired
OrderService orderService; @Test
void contextLoads() throws IOException {
List<UserAddress> userAddresses = orderService.initOrder("sxt");
for (UserAddress userAddress : userAddresses) {
System.out.println(userAddress.getId()+" "+userAddress.getAddress());
}
//想在dubbo首页显示消费者 阻止程序停止
System.in.read();
} }
5、修改application.properties后启动上面的测试类即可
#application.name
dubbo.application.name=boot-ego-order-service-comsumer
#address
dubbo.registry.address=zookeeper://自己的服务器地址:2181
小结第一种方式:
1.提供者只需要在application.properties中声明:模块名字,注册中心地址,连接规则(使用什么协议,暴露什么端口)。其余的由service实现类中的@service(apache.dubbo)注解帮忙创建和暴露了对象
2.消费者只需要在application.properties中声明:模块名字,注册中心地址。其余由service实现类中的@service(spring的)注解帮忙创建和注入对象,@Reference(apache.dubbo)帮忙引入远程服务,在测试类中就可以使用@Autowired装配对象使用其方法
手把手教你Dubbo与SpringBoot常用两种方式整合的更多相关文章
- .Net 中读写Oracle数据库常用两种方式
.net中连接Oracle 的两种方式:OracleClient,OleDb转载 2015年04月24日 00:00:24 10820.Net 中读写Oracle数据库常用两种方式:OracleCli ...
- 引入springboot的两种方式以及springboot容器的引入
一.在项目中引入springboot有两种方式: 1.引入spring-boot-starter-parent 要覆盖parent自带的jar的版本号有两种方式: (1)在pom中重新引入这个jar, ...
- springboot中使用异步的常用两种方式及其比较
一般对于业务复杂的流程,会有一些处理逻辑不需要及时返回,甚至不需要返回值,但是如果充斥在主流程中,占用大量时间来处理,就可以通过异步的方式来优化.实现异步的常用方法远不止两种,但是个人经验常用的,好用 ...
- 使用注解和xml两种方式整合Activemq与spring(gradle工程)
一.新建gradle工程 1.1 使用intellij新建gradle工程步骤省略 二.导入依赖,配置build.gradle plugins { id 'java' } group 'com.bdh ...
- SpringCloud系列-整合Hystrix的两种方式
Hystrix [hɪst'rɪks],中文含义是豪猪,因其背上长满棘刺,从而拥有了自我保护的能力.本文所说的Hystrix是Netflix开源的一款容错框架,同样具有自我保护能力. 本文目录 一.H ...
- XFire构建服务端Service的两种方式
1.原声构建: 2.集成spring构建 http://blog.csdn.net/carefree31441/article/details/4000436XFire构建服务端Service的两种方 ...
- SpringBoot集成Mybatis实现多表查询的两种方式(基于xml)
下面将在用户和账户进行一对一查询的基础上进行介绍SpringBoot集成Mybatis实现多表查询的基于xml的两种方式. 首先我们先创建两个数据库表,分别是user用户表和account账户表 ...
- springboot 注册服务注册中心(zk)的两种方式
在使用springboot进行开发的过程中,我们经常需要处理这样的场景:在服务启动的时候,需要向服务注册中心(例如zk)注册服务状态,以便当服务状态改变的时候,可以故障摘除和负载均衡. 我遇到过两种注 ...
- spring boot @ResponseBody转换JSON 时 Date 类型处理方法,Jackson和FastJson两种方式,springboot 2.0.9配置fastjson不生效官方解决办法
spring boot @ResponseBody转换JSON 时 Date 类型处理方法 ,这里一共有两种不同解析方式(Jackson和FastJson两种方式,springboot我用的1.x的版 ...
随机推荐
- 体验.NET Core 命令行应用程序-CommandLineUtils
前言 在我们开发中可能需要设计一次性应用程序,这些实用程序可以利用接近原始源代码的优势,但可以在与主Web应用程序完全独立的安全性上下文中启动.具体在 [管理过程](https://12factor. ...
- .NET Core学习笔记(3)——async/await中的Exception处理
在写了很多年.NET程序之后,年长的猿类在面对异步编程时,仍不时会犯下致命错误,乃至被拖出去杀了祭天.本篇就async/await中的Exception处理进行讨论,为种族的繁衍生息做出贡献……处理a ...
- 三、Nginx原理解析
Nginx原理解析 一.反向代理 工作流程 用户通过域名发出访问Web服务器的请求,该域名被DNS服务器解析为反向代理服务器的IP地址: 反向代理服务器接受用户的请求: 反向代理服务器在本地缓存中查找 ...
- JS的var和let的区别(详细讲解)
let是ES6新增的,它主要是弥补var的缺陷,你也可以把let看做var的升级版.下面我就来详细讲讲var和let的区别 相同点: var和let都有函数级作用域 不同点: (1)var是全局作用域 ...
- 《C# 爬虫 破境之道》:第一境 爬虫原理 — 第四节:同步与异步请求方式
前两节,我们对WebRequest和WebResponse这两个类做了介绍,但两者还相对独立.本节,我们来说说如何将两者结合起来,方式有哪些,有什么不同. 1.4.1 说结合,无非就是我们如何发送一个 ...
- git工作中总结2
目的:在远程分支上添加新文件(代码) 1.clone分支 git clone -b 分支 url cd到文件夹,添加文件到改目录下 2.创建新的分支并切换 git checkout -b dev(本地 ...
- 开始使用Manjaro
Manjaro是什么? 一个基于Arch系列,开源的linux发行版 Mnajrao官网了解更多,这里不做更多阐述内容 为什么使用Manjaro 第一点,为了方便自己隔离腾讯网游 第二点,更方便的学习 ...
- Exception in thread "main" java.lang.AbstractMethodError: org.springframework.boot.context.config.ConfigFileApplicationListener.supportsSourceType(Ljava/lang/Class;)Z
依赖冲突,查看pom.xml文件 查看parent项目的依赖版本为 <parent> <groupId>org.springframework.boot</groupId ...
- 针对MySQL的MVCC多版本并发控制的一些总结
MVCC MVCC细节太多,我直接备忘一下总结: MVCC就是通过事务的ID与行数据的版本(修改事务的ID)进行比较(通过redo log可以回溯版本)得出哪些版本的行数据可见和不可见而实现的事务隔离 ...
- python类型-字典
字典是python语言中唯一的映射类型,映射对象里哈希值(键,key)和指向的对象(值,value)是一对多的关系.一个字典对象是可变的,是一个容器类型,可存储任意个数的python对象,其中也可以包 ...