Dubbo
首先Dubbo采用RPC模式进行远程网络通信,是以一个通信中心作为中间管理者的身份来通知各个模块的运行,以该图为例子
注册中心可以采用zookeeper来作为中心,安装zookeeper,使用windows/linux均可,学习中我采用的windows搭建的zookeeper
zookeeper下载路径 :http://archive.apache.org/dist/zookeeper/
安装完成后找到zookeeper的bin目录下启动zookeeper的服务器
如果出现了错误,那么我们需要去到zookeeper的conf目录下复制一份名为zoo_sample.cfg的文件,改名为zoo.cfg,然后查看其中的端口号是否是2181,改完成后启动zKservice.cmd。
这里就不做对监控器的说明,下载监控器可以到dubbo的github上下载源码并对其打成jar包运行。
接着对着官网上的配置一步一步来
首先使用maven创建三个项目
提供公共接口以及公共bean的maven工程
bean文件
public class UserAddress implements Serializable {
private Integer id;
private String userAddress; //用户地址
private String userId; //用户id
private String consignee; //收货人
private String phoneNum; //电话号码
private String isDefault; //是否为默认地址 Y-是 N-否
public UserAddress() {
super();
// TODO Auto-generated constructor stub
}
public UserAddress(Integer id, String userAddress, String userId, String consignee, String phoneNum,
String isDefault) {
super();
this.id = id;
this.userAddress = userAddress;
this.userId = userId;
this.consignee = consignee;
this.phoneNum = phoneNum;
this.isDefault = isDefault;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getConsignee() {
return consignee;
}
public void setConsignee(String consignee) {
this.consignee = consignee;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
public String getIsDefault() {
return isDefault;
}
public void setIsDefault(String isDefault) {
this.isDefault = isDefault;
}
接口文件UserService
public interface OrderService {
/**
* 初始化订单
* @param userId
*/
public List<UserAddress> initOrder(String userId);
}
接口文件OrderService
public interface OrderService {
/**
* 初始化订单
* @param userId
*/
public List<UserAddress> initOrder(String userId);
}
提供生产者的maven工程
实现接口的文档
public class UserServiceImpl implements UserService {
public List<UserAddress> getUserAddressList(String userId) {
System.out.println("UserServiceImpl.....old...");
// TODO Auto-generated method stub
UserAddress address1 = new UserAddress(1, "北京市昌平区宏福科技园综合楼3层", "1", "李老师", "010-56253825", "Y");
UserAddress address2 = new UserAddress(2, "深圳市宝安区西部硅谷大厦B座3层(深圳分校)", "1", "王老师", "010-56253825", "N");
/*try {
Thread.sleep(4000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
return Arrays.asList(address1,address2);
}
}
提供消费者的maven工程
接口文档
@Service
public class OrderServiceImpl implements OrderService {
//注入配置中的暴露接口
@Autowired
UserService userService;
public List<UserAddress> initOrder(String userId) {
System.out.println("用户id:"+userId);
//1、查询用户的收货地址
List<UserAddress> addressList = userService.getUserAddressList(userId);
for (UserAddress userAddress : addressList) {
System.out.println(userAddress.getUserAddress());
}
return addressList;
}
}
然后把消费者工程项目和生产者工程项目去引用接口工程项目
消费者工程和生产者工程两个pom文件引入的一模一样就行
<dependencies>
<dependency>
<groupId>com.atguigu.gmall</groupId>
<artifactId>gmall-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- 引入dubbo -->
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
<!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端端 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
</dependencies>
以下是配置xml
配置生产者
配置对外暴露服务的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: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://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 -->
<dubbo:application name="user-service-provider"/> <!-- 暴露着的名称 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<dubbo:protocol name="dubbo" port="20880"/><!-- dubbo端口号 -->
<!-- dubbo的名称以及实现类 -->
<bean id="userServiceImpl" class="com.atguigu.gmall.service.impl.UserServiceImpl"/>
<!-- 对外暴露的接口 -->
<dubbo:service interface="com.atguigu.gmall.service.UserService" ref="userServiceImpl"/>
</beans>
紧接着启动dubbo,按照官网上写的方式,变成阻塞
启动成功后,登录admin监控者查看
提供者已经发布成功!
配置消费者
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
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://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.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">
<!-- 扫描组件 -->
<context:component-scan base-package="com.atguigu.gmall.service.impl"></context:component-scan>
<!-- 服务名称,不重名就行 -->
<dubbo:application name="demo-consumer"/>
<!-- 连接zookeeper -->
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<!-- 接口引用刚刚对外暴露的远程接口名称 -->
<dubbo:reference id="userService"
interface="com.atguigu.gmall.service.UserService"/>
</beans>
启动主方法
消费者也成功调用
查看监控器
以上就是dubbo的简单实例,不是很详细,我也是刚刚接触dubbo。
也可以参考一下这个视频教程https://www.bilibili.com/video/av30612478?from=search&seid=12968075294494126732 进行详细的学习,有更好的我们也可以一起讨论。