Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现
服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者(Consumer): 调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
安装zookeeper(管理中心)
https://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/
1、解压
tar -zxvf /home/lk/zookeeper-3.3.6.tar.gz
2、zookeeper-3.3.6.tar.gz目录下创建data文件
3、mv zoo_sample.cfg zoo.cfg(把zoo_sample.cfg改名为zoo.cfg)
4、zoo.cfg 下修改 dataDir=/root/zookeeper-3.4.6/data
1. 启动ZK服务: sh bin/zkServer.sh start
2. 查看ZK服务状态: sh bin/zkServer.sh status
3. 停止ZK服务: sh bin/zkServer.sh stop
4. 重启ZK服务: sh bin/zkServer.sh restart
5、zkCli.sh -server 127.0.0.1:2181 进入zookeeper命令行界面
6、zookeeper常用指令:
- ls / (查看某个目录包含的所有文件)
- ls2 / (查看目录下详细信息)
- create /test "test"(创建znode,并设置初始内容)
- Created /test(创建一个新的 znode节点“ test ”)
- get /test (获取znode的数据)
- set /test "ricky"(修改znode内容)
- delete /test (删除znode)
- quit -- 退出客户端
- help -- 帮助命令
安装double-admin(管理中心的,界面显示)
1、下载:incubator-dubbo-ops-master
2、修改admin下配置,zookeeper改成自己的配置
3、dubbo-admin 下cmd 执行:mvn clean package
4、启动dubbo : java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
monitor安装监控中心
https://blog.csdn.net/yyhcsfy/article/details/80772476
dubbo - HelloWorld
1、导入包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<scope>2.6.2</scope>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<scope>2.12.0</scope>
</dependency>
目前Curator有2.x.x和3.x.x两个系列的版本,支持不同版本的Zookeeper。其中Curator 2.x.x兼容Zookeeper的3.4.x和3.5.x。而Curator 3.x.x只兼容Zookeeper 3.5.x,并且提供了一些诸如动态重新配置(注意这是个坑点)
2、定义公共父类通信接口,公共类
public interface UserService {
List<UserAddress> getUserAddress(long playerId);
}
public class UserAddress implements Serializable {
private Integer id;
private String userAddress;
private String userId;
private String consignee;
private String phoneNum;
private String isDefault;
}
3、提供者
<?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://code.alibabatech.com/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">
<!-- 1、指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名) -->
<dubbo:application name="boot-user-service-provider"></dubbo:application>
<!-- 2、指定注册中心的位置 -->
<!-- <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry> -->
<dubbo:registry protocol="zookeeper" address="192.168.33.80:2181"></dubbo:registry>
<!-- 3、指定通信规则(通信协议?通信端口) -->
<dubbo:protocol name="dubbo" port="20882"></dubbo:protocol>
<!-- 4、暴露服务 ref:指向服务的真正的实现对象 -->
<dubbo:service interface="com.stude.dubbo.dubbo.UserService" ref="userServiceImpl"></dubbo:service>
<!-- 服务的实现 -->
<bean id="userServiceImpl" class="com.stude.provider.UserServiceImpl"></bean>
</beans>
public class UserServiceImpl implements UserService {
@Override
public List<UserAddress> getUserAddress(long playerId) {
List<UserAddress> userAddresses = new ArrayList<>();
for(int i = 0;i< 5;i++){
UserAddress address = new UserAddress();
address.setId(i + 1);
address.setUserAddress("秋名山" + (i + 3) * 7 +"号公路");
address.setUserId("1111" + i);
address.setConsignee("幻三");
address.setPhoneNum((1111 * i) +"");
address.setIsDefault("有多少事!!");
userAddresses.add(address);
}
return userAddresses;
}
}
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("provider.xml");
ioc.start();
//阻塞
System.in.read();
}
5、消费者
<?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://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://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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.stude.consumer"></context:component-scan>
<!-- 1、指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名) -->
<dubbo:application name="order-server-consumer"></dubbo:application>
<!-- 2、指定注册中心的位置 -->
<dubbo:registry address="zookeeper://192.168.33.80:2181"></dubbo:registry>
<!--<dubbo:registry protocol="zookeeper" address="192.168.33.80:2181"></dubbo:registry>-->
<dubbo:reference interface="com.stude.dubbo.dubbo.UserService" id="userService"></dubbo:reference>
</beans>
@Service
public class OrderServiceImpl {
@Autowired
UserService userService;
public List<UserAddress> initOrder(long userId) {
return userService.getUserAddress(userId);
}
}
@SuppressWarnings("resource")
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");
OrderServiceImpl orderServiceImpl = context.getBean(OrderServiceImpl.class);
List<UserAddress> mm = orderServiceImpl.initOrder(3);
System.out.println(new Gson().toJson(mm));
}