dubbo HelloWorld

本文介绍了Apache Dubbo的核心功能,包括RPC调用、容错和负载均衡,以及服务注册和发现。详细讲解了如何安装Zookeeper、Double-Admin以及监控中心。并展示了简单的Dubbo HelloWorld示例,包括服务提供者和消费者的实现。
摘要由CSDN通过智能技术生成

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常用指令:

  1. ls / (查看某个目录包含的所有文件)
  2. ls2 / (查看目录下详细信息)
  3. create /test "test"(创建znode,并设置初始内容)
  4. Created /test(创建一个新的 znode节点“ test ”)
  5. get /test (获取znode的数据)
  6. set /test "ricky"(修改znode内容)
  7. delete /test (删除znode)
  8. quit -- 退出客户端
  9. 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));
    }

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值