Dubbo - 多协议发布服务

国庆期间闲来无事,写了一个简单的小程序,小程序名称叫做 IT藏经楼。目的是分享这些年自己积累的一些学习材料,方面大家查找使用,包括电子书、案例项目、学习视频、面试题和一些PPT模板。里面所有材料都免费分享。目前小程序中只发布了非常小的一部分,后续会陆续上传分享。当前版本的小程序页面也比较简单,还在逐渐的优化中。

上一篇我们介绍了如何通过注册中心来注册服务和远程调用服务,上面的例子中服务都是基于原生的Dubbo协议发布和调用的,其实Dubbo还提供了对其它通信协议的支持,比如RMI,Hessian,http,webservice,thrift,rest等。

在这里插入图片描述
由于可以对多协议的支持,使得其它RPC框架的应用程序可以快速的切入到dubbo生态中。同时,由于多协议的支持,我们可以根据不同的应用场景选择适合的协议来发布服务。

集成Web Service协议
web service是一个短连接并且基于http协议的方式来实现的RPC框架。要集成web service协议,我们需要添加需要依赖的jar包:

		<dependency>
	  		<groupId>org.apache.cxf</groupId>
	  		<artifactId>cxf-rt-frontend-simple</artifactId>
	  		<version>3.3.2</version>
	  	</dependency>
	  	<dependency>
	  		<groupId>org.apache.cxf</groupId>
	  		<artifactId>cxf-rt-transports-http</artifactId>
	  		<version>3.3.2</version>
	  	</dependency>
	  	<dependency>
	  		<groupId>org.eclipse.jetty</groupId>
	  		<artifactId>jetty-server</artifactId>
	  		<version>9.4.19.v20190610</version>
	  	</dependency>
	  	<dependency>
	  		<groupId>org.eclipse.jetty</groupId>
	  		<artifactId>jetty-servlet</artifactId>
	  		<version>9.4.19.v20190610</version>
	  	</dependency>

修改application.xml,添加web service的protocol,同时在发布service的时候同时使用dubbo和web service协议:

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xmlns="http://www.springframework.org/schema/beans"
       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">
       
       <!-- 服务提供方应用信息 -->
       <dubbo:application name="practice-service" />
       
       <!-- 使用zookeeper注册中心暴露服务地址 -->
       <dubbo:registry id="registryCenter1" address="zookeeper://127.0.0.1:2181"/>
       <!-- <dubbo:registry id="registryCenter2" address="zookeeper://127.0.0.1:2181"/> -->
       <!-- 使用dubbo协议在20880端口暴露服务 -->
       <dubbo:protocol name="dubbo" port="20880"/>
       
       <dubbo:protocol name="webservice" port="8888" server="jetty"/>
       
       <!-- 声明需要暴露的服务接口 -->
       <dubbo:service interface="org.practice.service.api.LoginService" ref="loginService" 
       	registry="registryCenter1" protocol="dubbo,webservice"/>
       
       <bean id="loginService" class="org.practice.service.provider.LoginServiceImpl"/>
       
</beans>

重新启动之后,通过zookeeper客户端可以看到同时使用dubbo和web service注册了服务到zookeeper
在这里插入图片描述
同时,浏览器中访问下面的url可以获得web service的描述文档
http://localhost:8888/org.practice.service.api.LoginService?wsdl
在这里插入图片描述

Dubbo 对于 REST 协议的支持
Dubbo中的REST(表述性资源转移)支持,是基于JAX-RS2.0(Java API for RESTful Web Services)来实现的。 REST 是一种架构风格,简单来说就是对于api接口的约束,基于 URL 定位 资源,使用http动词(GET/POST/DELETE)来描述操作

同样,我们需要添加依赖的jar:

	<dependency>
		<groupId>org.jboss.resteasy</groupId>
		<artifactId>resteasy-jaxrs</artifactId>
		<version>3.8.0.Final</version>
	</dependency>
	<dependency>
		<groupId>org.jboss.resteasy</groupId>
		<artifactId>resteasy-client</artifactId>
		<version>3.8.0.Final</version>
	</dependency>

修改LoginService接口如下:

package org.practice.service.api;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;

@Path("/login")
public interface LoginService {
	String login(String username,String password);
	
	@GET
	@Path("/hello/{name}")
	String sayHello(@PathParam("name") String name);
}

在application.xml中添加rest协议:

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xmlns="http://www.springframework.org/schema/beans"
       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">
       
       <!-- 服务提供方应用信息 -->
       <dubbo:application name="practice-service" />
       
       <!-- 使用zookeeper注册中心暴露服务地址 -->
       <dubbo:registry id="registryCenter1" address="zookeeper://127.0.0.1:2181"/>
       <!-- <dubbo:registry id="registryCenter2" address="zookeeper://127.0.0.1:2181"/> -->
       <!-- 使用dubbo协议在20880端口暴露服务 -->
       <dubbo:protocol name="dubbo" port="20880"/>
       
       <!-- <dubbo:protocol name="webservice" port="8888" server="jetty"/> -->
       <dubbo:protocol name="rest" port="8889" server="jetty"/>
       
       <!-- 声明需要暴露的服务接口 -->
       <dubbo:service interface="org.practice.service.api.LoginService" ref="loginService" 
       	registry="registryCenter1" protocol="rest"/>
       
       <bean id="loginService" class="org.practice.service.provider.LoginServiceImpl"/>
    
</beans>

重启服务后可以看到已经发布rest服务到zookeeper中:
在这里插入图片描述
浏览器中访问http://localhost:8889/login/hello/test可以看到返回结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无法无天过路客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值