关于Dubbo以及Zookeeper的介绍和操作教程版权声明

原创
小哥 2年前 (2022-12-30) 阅读数 75 #大杂烩
  1. Dubbo是什么?

Dubbo是一个致力于提供高性能和透明的分布式服务框架RPC远程服务调用场景,以及SOA服务治理方案。简单地说,dubbo它是一个服务框架。如果没有分布式需求,则不需要。仅在分发时dubbo这样一个分布式服务框架的需求本质上是一个服务调用,说白了,是一个用于远程服务调用的分布式框架(再见)。Web Service模式中的WSdl,以服务提供商和消费者的方式。dubbo上注册)
其核心部分包含:

  1. 远程通讯: 提供对各种基于长连接的访问NIO框架抽象封装,包括多线程模型、序列化和“请求”-信息交换的“响应”模式。

  2. 集群容错: 基于接口方法提供透明的远程过程调用,包括多协议支持和集群支持,如软负载平衡、容错、地址路由和动态配置。

  3. 自动发现: 基于注册表目录服务,服务使用者可以动态地查找服务提供者,使地址透明,并使服务提供者能够平滑地增加或减少机器。

  4. Dubbo你能做什么?

1.透明的远程方法调用与本地方法一样调用远程方法,配置简单,无API侵入。
2.软负载平衡和容错机制,可在intranet中替换。F5以及其他硬件负载平衡器,以降低成本和单点。

  1. 自动服务注册和发现,不再需要写死服务提供商地址,注册中心基于接口名称查询服务提供商IP地址,以及平滑添加或删除服务提供商的能力。

Dubbo采用全 spring 配置方法,透明访问应用程序,无应用程序API入侵,只需使用Spring加载Dubbo该配置可以是,Dubbo基于Spring的Schema扩展名已加载。

之前使用Web Service,我想 测试 接口可以通过soapui或LR进行功能或性能测试。但现在使用Dubbo,接口不能直接交互,我试图通过模拟消费者地址进行测试,结果 不堪入目 然后再次使用。 jmeter 通过junit测试,但仍需要继续dubbo上去注册,如果你不提供源代码,这个测试用例不容易编写。....

  1. dubbo的架构

dubbo架构图如下:

节点角色描述:

Provider: 公开服务的服务提供程序。

Consumer: 调用远程服务的服务使用者。

Registry: 服务注册和发现的注册表。

Monitor: 统计服务呼叫数和呼叫时间的监控中心。

Container : 服务运行容器。

我认为这是非常好的,角色是明确的,可以根据每个节点角色的状态来确定服务是否正常。

呼叫关系描述:

0 服务容器负责启动、加载和运行服务提供程序。

  1. 服务提供程序在启动时向注册表注册它提供的服务。

  2. 服务使用者向注册中心订阅启动时所需的服务。

  3. 注册表向使用者返回一个服务提供者地址列表,如果有更改,则注册表会根据长连接将更改数据推送给使用者。

  4. 服务使用者根据软负载平衡算法从提供者地址列表中选择要调用的提供者,如果调用失败,则选择另一个调用。

  5. 服务消费者和提供商在存储器中累积呼叫次数和呼叫时间,并每分钟定期向监控中心发送统计数据。

dubbo的容错性 显而易见 ,性能尚未测试,需要删除系统的一页5子接口,最初想建议缓存,但无法采用业务关系,仍需研究dubbo性能调整问题...

  1. dubbo使用方法。

Dubbo采用全Spring配置方法,透明访问应用程序,无应用程序API入侵,只需使用Spring加载Dubbo该配置可以是,Dubbo基于Spring的Schema扩展名已加载。如果不想使用Spring配置,希望通过。API拨打电话的方式(不推荐)

下面我们来看看spring配置的写入方法:

服务提供商:

1. 下载zookeeper注册中心,下载地址: http://www.apache.org/dyn/closer.cgi/zookeeper/ 下载后,解压并输入D:\apach-zookeeper-3.4.5\bin,

双击zkServer.cmd启动注册表服务。

2. 定义服务接口: (接口需要单独打包,并在服务提供商和消费者之间共享。)

下面的例子很好。它可以写得非常详细。model.

  1. package com.unj.dubbotest.provider;

  2. import java.util.List;

  3. public interface DemoService {

  4. String sayHello(String name);

  5. public List getUsers();

  6. }

在服务提供商处实现接口:(服务消费者的隐藏实现)

  1. package com.unj.dubbotest.provider;

  2. import java.util.ArrayList;

  3. import java.util.LinkedList;

  4. import java.util.List;

  5. public class DemoServiceImpl implements DemoService{

  6. public String sayHello(String name) {

  7. return "Hello " + name;

  8. }

  9. public List getUsers() {

  10. List list = new ArrayList();

  11. User u1 = new User();

  12. u1.setName("jack");

  13. u1.setAge(20);

  14. u1.setSex("男");

  15. User u2 = new User();

  16. u2.setName("tom");

  17. u2.setAge(21);

  18. u2.setSex("女");

  19. User u3 = new User();

  20. u3.setName("rose");

  21. u3.setAge(19);

  22. u3.setSex("女");

  23. list.add(u1);

  24. list.add(u2);

  25. list.add(u3);

  26. return list;

  27. }

  28. }

用Spring配置索赔公开服务:

  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <beans xmlns="http://www.springframework.org/schema/beans"

  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  4. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"

  5. xsi:schemaLocation="http://www.springframework.org/schema/beans

  6. http://www.springframework.org/schema/beans/spring-beans.xsd

  7. http://code.alibabatech.com/schema/dubbo

  8. http://code.alibabatech.com/schema/dubbo/dubbo.xsd

  9. ">

  10. <bean id="demoService" class="com.unj.dubbotest.provider.DemoServiceImpl" />

  11. <dubbo:application name="xixi_provider"  />

  12. <dubbo:registry address="zookeeper://127.0.0.1:2181" />

  13. <dubbo:protocol name="dubbo" port="20880" />

  14. <dubbo:service interface="com.unj.dubbotest.provider.DemoService" ref="demoService" />

加载Spring配置、启动服务:

  1. package com.unj.dubbotest.provider;

  2. import org.springframework.context.support.ClassPathXmlApplicationContext;

  3. public class Provider {

  4. public static void main(String[] args) throws Exception {

  5. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml"});

  6. context.start();

  7. System.in.read(); // 为了确保服务始终打开,使用输入流的阻塞来模拟

  8. }

  9. }

服务消费者:

applicationContext-dubbo.xml 当我第一次开始测试时,我需要很多接口,所以我把这个文件写满了。后来,我熟悉了按业务类型分离接口,并编写了N多个 applicationContext-dubbo-***.xml 简练多了 》。

1.通过Spring要配置参考远程服务,请执行以下操作:

  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <beans xmlns="http://www.springframework.org/schema/beans"

  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"

  4. xsi:schemaLocation="http://www.springframework.org/schema/beans

  5. http://www.springframework.org/schema/beans/spring-beans.xsd

  6. http://code.alibabatech.com/schema/dubbo

  7. http://code.alibabatech.com/schema/dubbo/dubbo.xsd

  8. ">

  9. <dubbo:application name="hehe_consumer" />

  10. <dubbo:registry address="zookeeper://127.0.0.1:2181" />

  11. <dubbo:reference id="demoService"

  12. interface="com.unj.dubbotest.provider.DemoService" />

2.加载Spring配置和调用远程服务:

  1. package com.alibaba.dubbo.demo.pp;

  2. import java.util.List;

  3. import org.springframework.context.support.ClassPathXmlApplicationContext;

  4. import com.unj.dubbotest.provider.DemoService;

  5. public class Consumer {

  6. public static void main(String[] args) throws Exception {

  7. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(

  8. new String[] { "applicationContext.xml" });

  9. context.start();

  10. DemoService demoService = (DemoService) context.getBean("demoService"); //

  11. String hello = demoService.sayHello("tom"); // ִ

  12. System.out.println(hello); //

  13. //

  14. List list = demoService.getUsers();

  15. if (list != null && list.size() > 0) {

  16. for (int i = 0; i < list.size(); i++) {

  17. System.out.println(list.get(i));

  18. }

  19. }

  20. // System.out.println(demoService.hehe());

  21. System.in.read();

  22. }

  23. }

呼叫的结果是:

dubbo管理页面:

此管理页面还需要部署环境。起初我以为是dubbo我找了半天都没找到。....

应用程序页面:

提供程序页面:

消费者页面:

服务页面:

无论测试是否成功,我认为只要我们看到状态是否正常,我们就会ok了 ....

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门