dubbo+zookeeper实现远程服务

dubbo是阿里巴巴提供的基于spring的使用RPC服务的治理和调度框架
主要功能:
服务发布
服务调用
负载均衡
服务扩容
服务监控
服务管理
dubbo采用了spring配置,它没有api入侵,只需要xml配置即可。
dubbo+zookeeper和zookeeper的区别:
单纯的zookeeper实现远程调用的服务发现需要大量的Java代码,生产者消费者的服务发布和获取,zk通过集合来封装url,并通过随机数的方式来实现负载均衡,dubbo框架很好的解决了这些繁琐的问题,提高了开发效率,更容易上手,简直是新人的福利。前面的文章我专门书写了zk实现服务发现的过程,有兴趣的小伙伴们可以去看一下,dubbo基于zk功能更加强大。
使用步骤
1添加依赖

	  <dependencies>
   <!-- zk客户端依赖 --> 
 			  <dependency>
        <groupId>com.github.sgroschupf</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.1</version>
    </dependency>
    <!-- dubbo依赖 -->
    <dependency>
    <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
        <version>2.6.0</version>
    </dependency>	
2.创建接口,远程调用生产者宝楼给消费者的接口服务,一般该接口作为单独项目实现
3.生产者实现该接口,体现具体功能。
4. 发布服务
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        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://code.alibabatech.com/schema/dubbo
            http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

		            <!-- 扫描业务对象 -->
		            <context:component-scan base-package="实现类包"></context:component-scan>
		    <!-- 给发布的服务起名字 不可重复 -->
		            <dubbo:application name="red-provider"/>
		    <!-- 配置服务的注册中心  选择zookeeper -->
		      <dubbo:registry protocol="zookeeper" 
		      address="zk集群地址+端口" />  
		    <!-- 指定暴露的远程服务的协议,主机,端口 当前服务器,客户端通过这个来访问 -->
		      <dubbo:protocol name="dubbo" host="生产者主机" port="20882"/> 
		    <!-- 指定需要暴露服务的对应的接口
		       interface : 指定需要暴露的服务对应的接口,客户端通过这个接口来调用服务,我们必须给他实例化实现类对象,客户才可以调用
		       ref:指定提供远程服务的实现类对象
		      --> 
		      <dubbo:service interface="服务接口完全限定名" ref="实现类名首字母小写"/>
		    </beans>
5.创建启动类发布集群服务
public class ProviderApp {
 
   public static void main(String[] args) throws IOException {
			  //加载spring容器,发布远程服务
			ClassPathXmlApplicationContext
			ac=new ClassPathXmlApplicationContext("red-provider.xml");
			ac.start(); //启动spring容器
			System.out.println("-------发布dubbo服务-------20882");
			System.in.read(); //阻塞主线程,主线程停止,服务器就会关闭,客户端连接不上
		}
}

6.消费者

	1.获取服务
		<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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://code.alibabatech.com/schema/dubbo
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
     <!-- 给发布的服务起名字 -->
        <dubbo:application name="red-consumer"/>
    <!-- 配置服务的注册中心 -->
	  <dubbo:registry protocol="zookeeper" 
  	address="zk集群主机+端口" />   
<!--  
  获得远程服务的代理对象
  --> 
  <dubbo:reference id="代理对象" interface="服务接口的完全限定名"/>
加载spring配置文件的时候,dubbo自动连接zk集群,获得interface对应的节点下,providers接下的服务列表,产生代理对象
</beans>
2.创建启动类测试
	public class ConsumerApp {
			 
			public static void main(String[] args) throws InterruptedException {
			/***
			 * 完成集群服务消费,测试负载均衡
			 */
			ApplicationContext
			ac=new ClassPathXmlApplicationContext("red-consumer.xml");
			//获得spring容器的远程代理对象
			RedService service=(向下转型) ac.getBean("代理对象");
			//调用远程服务
			while(true){
				String value = service.sendRed(调用服务传参数);
				System.out.println(value);
			Thread.sleep(3000);
		}

	}

测试步骤比较简洁,实际开发中根据不同情况合理分配资源。

Dubbo + Zookeeper 的项目启动顺序大致可以分为以下几个步骤: 1. **Zookeeper 启动**:首先,需要启动Zookeeper服务。这是集群管理的基础,用于协调分布式系统中各个节点的状态和服务发现。 2. **注册中心(Zookeeper作为注册中心)配置**:接下来,在Dubbo项目的配置文件中设置Zookeeper作为注册中心的信息,包括Zookeeper的地址、端口等信息。这一步决定了Dubbo应用如何通过Zookeeper服务提供者和消费者交互。 3. **服务提供者启动**:服务提供者启动时,会向注册中心(即Zookeeper)注册其提供的服务。这里的注册过程包含了两个关键步骤: - **检查点**:在启动服务之前,通常会先检查某个状态点(如某个目录路径),以确保所有必要的组件已经就绪并正常运行。 - **注册服务**:服务提供者将自身的服务信息(例如服务名、版本、实现类等)注册到Zookeeper上,形成服务目录树结构,方便后续服务查找。 4. **服务消费者启动**:服务消费者在启动时,会从注册中心查询可用的服务列表。这个过程中可能会涉及到缓存机制,减少对注册中心的频繁访问压力。当消费者发现目标服务后,会建立连接并准备调用服务。 5. **服务调用**:在完成以上步骤之后,消费者就可以通过创建的连接调用提供者的服务了。Dubbo会负责处理服务调用的过程,包括序列化数据、网络传输、远程调用、异常处理等。 6. **关闭资源**:最后,在程序结束前,应确保所有资源得到正确的释放,避免内存泄漏或其他潜在的问题。 在这个过程中,Zookeeper 作为核心的协调服务,保证了服务提供者和服务消费者的稳定通信,并实现了动态服务发现的功能。Dubbo框架则提供了高效、易用的RPC(Remote Procedure Call)机制,使得服务间的调用更为便捷和可靠。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值