Dubbo常用功能02--protocol协议

摘要:
anyhost=true&application=site-service-boot-provider&bean.name=ServiceBean:com.yas.api.SiteService:async&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.yas.api.SiteService&methods=getName&pid=9832&register=true&release=2.7.3&revision=async&side=provider&timestamp=1635987214582&version=async3、服务消费者代码:消费者调用某个version的服务,服务端会使用其绑定的protocol进行完成消息的传输。packagecom.yas.serviceconsumer.controller;importcom.yas.api.SiteService;importorg.apache.dubbo.config.annotation.Reference;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;@RestControllerpublicclassProtocolSiteController{@ReferenceSiteServicesiteService1;@RequestMappingpublicStringgetName1{returnsiteService1.getName;}@ReferenceSiteServiceSiteService2;@RequestMappingpublicStringgetName2{returnSiteService2.getName;}}4、测试:使用postman请求地址:http://localhost:8000/pro1?name=zhangsan得到响应为:pro2:zhangsan

1、修改配置:

##指定某一种协议#protocol:#name: dubbo#port: 20882

##指定多种协议
protocols:
    pro1:
      id: dubbo1
      name: dubbo
      port: 20881host: 0.0.0.0pro2:
      id: dubbo2
      name: dubbo
      port: 20882host: 0.0.0.0

2、服务提供者代码:

对于"default"版本的服务,指定使用pro1协议

对于"async"版本的服务,指定使用pro2协议

1 package com.yas.serviceprovider.protocol;
2 
3 import com.yas.api.SiteService;
4 import org.apache.dubbo.config.annotation.Service;
5 
6 @Service(version = "default", protocol = "pro1")
7 public class ProtocolImpl1 implements SiteService {
8     @Override
9 public String getName(String name) {
10         return "pro1:" +name;
11 }
12 }
package com.yas.serviceprovider.protocol;

import com.yas.api.SiteService;
import org.apache.dubbo.config.annotation.Service;

@Service(version = "async",protocol = "pro2")
public class ProtocolImpl2 implements SiteService {
    @Override
    public String getName(String name) {
        return "pro2:" +name;
    }
}

使用zookeeper客户端连接,通过命令查询znode节点的数据:

./zkCli.sh
ls /dubbo/com.yas.api.SiteService/providers

查询的内容如下(经过URL解码):

dubbo://192.168.0.101:20881/com.yas.api.SiteService?anyhost=true&application=site-service-boot-provider&bean.name=ServiceBean:com.yas.api.SiteService:default&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.yas.api.SiteService&methods=getName&pid=9832&register=true&release=2.7.3&revision=default&side=provider&timestamp=1635987213625&version=default, 
dubbo://192.168.0.101:20882/com.yas.api.SiteService?anyhost=true&application=site-service-boot-provider&bean.name=ServiceBean:com.yas.api.SiteService:async&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.yas.api.SiteService&methods=getName&pid=9832&register=true&release=2.7.3&revision=async&side=provider&timestamp=1635987214582&version=async

3、服务消费者代码:

消费者调用某个version的服务,服务端会使用其绑定的protocol进行完成消息的传输。

package com.yas.serviceconsumer.controller;

import com.yas.api.SiteService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProtocolSiteController {

    @Reference(version = "default")
    SiteService siteService1;

    @RequestMapping("/pro1")
    public String getName1(@RequestParam("name") String name){
        returnsiteService1.getName(name);
    }

    @Reference(version = "async")
    SiteService SiteService2;

    @RequestMapping("/pro2")
    public String getName2(@RequestParam("name") String name){
        returnSiteService2.getName(name);
    }
}

4、测试:

使用postman请求地址:http://localhost:8000/pro1?name=zhangsan

得到响应为:pro1:zhangsan

使用postman请求地址:http://localhost:8000/pro2?name=zhangsan

得到响应为:pro2:zhangsan

免责声明:文章转载自《Dubbo常用功能02--protocol协议》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇美国数学会众多教授推荐的本科&研究生代数几何经典书籍教材清单【译】NDK概述下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Dubbo——服务引用

文章目录 引言 正文 服务订阅 Invoker的创建 单注册中心的Invoker创建 Dubbo直连的Invoker创建 创建代理类 引言 上一篇我们分析了服务发布的原理,可以看到默认是创建了一个Netty server,并通过Invoker调用服务,同样,在客户端也会创建一个Inovker对象,下面就一起来看看这个引用创建过程。...

jedis参数不当引发的问题总结

jedis参数不当引发dubbo服务线程池耗尽异常 现象:一个dubbo服务偶发性的出现个别机器甚至整个集群大量报线程池耗尽的问题。一开始对问题的处理比较粗暴,直接增加了10倍的线程数。但是问题依然偶尔出现,重启服务就可以暂时解决。后来,发现问题出现频率有点高,不得不花点时间认真分析了。 实际原因:jedis参数设置不当。实际仔细分析问题后发现每次出现异常...

1、Dubbo源码解析--Dubbo如何驱动Spring IOC容器并配合工作的?

首先Spring要注入自己的bean需要在Spring-provider.xml(提供者spring注入文件,名字可能不一样)添加bean注入,其中有dubbo的自定义标签,xml如何识别这些标签?拿到标签如何注入到Spring Container?一般需要如下几个步骤:   1)、设计配置属性和JavaBean     设计属性即dubbo.xsd中的a...

springboot整合dubbo的简单案例

使用框架:   jdk 1.8   springboot-2.1.3    dubbo-2.6   spring-data-jpa-2.1.5 一、开发dubbo服务接口: 按照Dubbo官方开发建议,创建一个接口项目,该项目只定义接口和model类; 1、创建springboot工程 spring-boot-demo-dubbo-interface 坐标...

启动dubbo消费端过程提示No provider available for the service的问题定位与解决

文/朱季谦 某次在启动dubbo消费端时,发现无法从zookeeper注册中心获取到所依赖的消费者API,启动日志一直出现这样的异常提示 Failed to check the status of the service com.fte.zhu.api.testService. No provider available for the service c...

Dubbo学习笔记5:Dubbo整体框架分析

Dubbo的分层架构 本文将简单介绍Dubbo的分层架构设计,如下图是Dubbo官方的整体架构图: Dubbo官方提供的该架构图很复杂,一开始我们没必要深入细节,下面我们简单介绍下其中的主要模块。 其中Service和Config层为API,对于服务提供方来说,使用ServiceConfig API来代表一个要发布的服务配置对象,对于服务消费方来说,R...