网站首页 > 开源技术 正文
上一篇我们介绍了如何通过注册中心来注册服务和远程调用服务,上面的例子中服务都是基于原生的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可以看到返回结果
猜你喜欢
- 2024-11-05 Java开发:哪些技能测试来评估Java开发人员的技能?
- 2024-11-05 关于升级 Spring 等依赖的一些经验
- 2024-11-05 下一代云原生-Quarkus?(云下一代防火墙描述正确的是?)
- 2024-11-05 为什么区域中心采用有限合伙的形式?| EB-5专家解析
- 2024-11-05 Java 近期新闻 JDK 18 发版计划、Spring Data 2021_1_0、苹果开源 GCGC
- 2024-11-05 架构设计:系统间通信——MQ:消息协议(上)
- 2024-11-05 云原生-Quarkus反应性入门(云原生到底解决什么问题)
- 2024-11-05 Java:什么是Quarkus?(quic java)
- 2024-11-05 缅怀科比!杜少直言难接受,前队友长文悼念,70分新星首次发言
- 2024-11-05 Reddit热议:最后一局《绝地求生》拿了第二名,躺在床上的你!
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)