dubbo 实现简易分布式服务
dubbo 实现简易分布式服务
服务器需要搭建zookeeper环境
zookeeper端口2181
还需要有java环境
1.需求
某个电商系统,订单服务需要调用用户服务获取某个用户的所有地址;
我们现在 需要创建两个服务模块进行测试
| 模块 | 功能 |
|---|---|
| 订单服务web模块 | 创建订单等 |
| 用户服务service模块 | 查询用户地址等 |
测试预期结果
订单服务web模块在A服务器,用户服务模块在B服务器,A可以远程调用B的功能。
2.工程架构

3.创建项目
3.1 公共接口层 ego-interface
简单maven项目即可

1.修改pom.xml文件
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.vsersion}</version>
</dependency>
</dependencies>
2.创建实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserAddress implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String userId;
private String userAddress;
}
3.创建公共接口
UserService
public interface UserService {
/**
* 查询用户的所有地址
* @return
*/
public List<UserAddress> queryAllAddress(Integer id);
}
OrderService
public interface OrderService {
/**
* 根据用户id 查找订单
* @param uid 用户id
* @return 订单
*/
public List<UserAddress> initOrder(Integer uid);
}
3.2 用户服务模块 ego-user-service-provider (服务提供者)
1.修改pom.xml文件
<dependencies>
<!-- 这里是公共接口层哦-->
<dependency>
<groupId>com.hgzy</groupId>
<artifactId>03-ego-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.7</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.11</version>
</dependency>
<!-- curator-framework -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.32.Final</version>
</dependency>
</dependencies>
2.创建服务实体类
@Service
public class UserServiceImpl implements UserService {
private static List<UserAddress> addresses=new ArrayList<UserAddress>();
static {
addresses.add(new UserAddress(1,"1","湖南省株洲市荷塘区湖南化工职业技术学院"));
addresses.add(new UserAddress(2,"2","湖南省永州市祁阳县"));
}
@Override
public List<UserAddress> queryAllAddress(Integer id) {
return addresses;
}
}
3.applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 声明应用程序的名称 -->
<dubbo:application name="ego-user-service-provider"/>
<!--指定注册中心的地址 -->
<dubbo:registry
address="zookeeper://服务器IP地址:2181"/>
<!--使用dubbo协议,将服务暴露在20880端口 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- 声明要暴露的实现类的对象-->
<bean id="userService"
class="com.hgzy.service.UserServiceImpl"/>
<!-- 进行服务暴露 -->
<dubbo:service interface="com.hgzy.service.UserService"
ref="userServiceImpl"/>
</beans>
4.测试服务
TestProvider
public class TestProvider {
public static void main(String[] args) throws IOException {
ApplicationContext ac=
new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
System.out.println("服务提供者启动成功");
System.in.read();
}
}
3.3 订单服务(服务消费者) ego-order-service-consumer
1.修改pom.xml文件
<dependencies>
<!-- 这里是公共接口层哦-->
<dependency>
<groupId>com.hgzy</groupId>
<artifactId>03-ego-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.7</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.11</version>
</dependency>
<!-- curator-framework -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.32.Final</version>
</dependency>
</dependencies>
2.创建服务实体类
@Service
public class OrderServiceImpl implements OrderService {
@Reference
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
@Override
public List<UserAddress> initOrder(Integer uid) {
return userService.queryAllAddress(uid);
}
}
3.applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 声明服务名称-->
<dubbo:application name="02-ego-order-service-consumer"/>
<!-- 指定注册中心地址-->
<dubbo:registry
address="zookeeper://服务器ip地址:2181"/>
<!-- 生成远程调用对象-->
<dubbo:reference
id="userService" interface="com.hgzy.service.UserService"/>
<!-- 创建订单对象-->
<bean id="orderService" class="com.hgzy.service.OrderServiceImpl">
<property name="userService" ref="userService"/>
< </bean>
</beans>
测试类
public class TestConsumer {
public static void main(String[] args) throws IOException {
ApplicationContext ac=
new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
OrderService orderService = (OrderService) ac.getBean(OrderService.class);
for (UserAddress userAddress : orderService.initOrder(1)) {
System.out.println(userAddress);
}
System.in.read();
}
}
dubbo 实现简易分布式服务的更多相关文章
- 基于Dubbo框架构建分布式服务
Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配 ...
- [转载] 基于Dubbo框架构建分布式服务
转载自http://shiyanjun.cn/archives/1075.html Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务 ...
- 基于Dubbo框架构建分布式服务(一)
Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配 ...
- 如何开发基于Dubbo RPC的分布式服务?
什么是Dubbo? Dubbo能做什么? 在Crystal框架下,如何开发基于Dubbo RPC的服务? 在Crystal框架下,如何调用Dubbo RPC服务? 相关的文章 什么是Dubbo? Du ...
- 基于Dubbo框架构建分布式服务(集群容错&负载均衡)
Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配 ...
- Dubbo 是一个分布式服务框架
Dubbo 是一个分布式服务框架-----http://www.cnblogs.com/chanshuyi/p/5144288.html
- 基于Dubbo框架构建分布式服务(三)
我们将上面开发的服务提供方服务,部署到2个独立的节点上(192.168.14.1和10.10.4.125),然后可以通过Dubbo管理中心查看对应服务的状况,如图所示: 上图中可以看出,该服务有两个独 ...
- 基于Dubbo框架构建分布式服务(二)
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> ...
- 搭建dubbo+zookeeper+dubboadmin分布式服务框架(windows平台下)
1.zookeeper注册中心的配置安装 1.1 下载zookeeper包(zookeeper-3.4.6.tar.gz),ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Goo ...
随机推荐
- int i=i++;和i=++i;和i++
1.int i=i++; 2.i=++i; 3.i++
- BUGKU web刷题记录
web1 直接F12查看源码,得到flag. web2 直接输入验证码答案,长度被限制,修改可输入长度,提交后得到flag. web3 $what=$_GET['what']; echo $what; ...
- LuoguP7426 [THUPC2017] 体育成绩统计 题解
Update \(\texttt{2021.3.11}\) 修复了一个笔误. Content 太长了,请直接跳转回题面查看. 数据范围:\(n\leqslant 10^4\),\(0\leqslant ...
- [COCI2018-2019#2] Sunčanje 题解
link 考虑简洁的 \(\text{cdq}\) 做法. 约定:第 \(i\) 个矩形左下角为 \((xl_i,yl_i)\),右上角为 \((xr_i,yr_i)\),所有坐标都已离散化. 如果 ...
- JAVA整合FlinkCDC 监控数据库表变化
版本至少jdk8 maven <!-- https://mvnrepository.com/artifact/com.alibaba.ververica/flink-connector-mysq ...
- JAVA根据URL生成二维码图片、根据路径生成二维码图片
引入jar包 zxing-2.3.0.jar.IKAnalyzer2012_u6.jar 下载地址:https://yvioo.lanzous.com/b00nlbp6h ...
- 【九度OJ】题目1183:守形数 解题报告
[九度OJ]题目1183:守形数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1183 题目描述: 守形数是这样一种整数, ...
- 【剑指Offer】数字在排序数组中出现的次数 解题报告(Python)
[剑指Offer]数字在排序数组中出现的次数 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interv ...
- VMware15 虚拟机分别设置连接笔记本的WLAN和以太网双网络
VMware15 虚拟机分别设置连接笔记本的WLAN和以太网双网络 虚拟机:window 10 主机: window 10 VVmware有3种网络连接模式:桥接.NAT.主机模式,默认分别对应VMN ...
- PlatformIO+Jlink进行调试
PlatformIO自带调试功能具体配置如下 https://docs.platformio.org/en/latest/plus/debug-tools/jlink.html 我是用的是直接 ...