dubbo的Rest调用
概念
dubbo也支持rest的方式调用服务,比如说有个服务他没有集成dubbo,但是他也想调用你的provider,那怎么办?他就可以用rest协议去调用
代码地址
https://gitee.com/zjj19941/ZJJ_Dubbo.git 下的 rest 项目
代码案例
provider配置文件
重点配置是:dubbo.protocols.p1 和 dubbo.protocols.p2
spring.application.name=dubbo-provider-demo
server.port=8081
dubbo.scan.base-packages=com.zjj.provider.service
dubbo.application.name=${spring.application.name}
dubbo.registry.address=zookeeper://zjj101:2181
# Dubbo 协议定义,这个是属于应用级别的 ,配置你这个应用 用什么协议
dubbo.protocols.p1.id=dubbo-one
dubbo.protocols.p1.name=dubbo
dubbo.protocols.p1.port=20881
dubbo.protocols.p1.host=0.0.0.0
# 添加rest协议
dubbo.protocols.p2.id=rest-two
dubbo.protocols.p2.name=rest
dubbo.protocols.p2.port=8082
dubbo.protocols.p2.host=0.0.0.0
provider实现类
package com.zjj.provider.service;
import com.zjj.DemoService;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.config.annotation.Service;
import org.apache.dubbo.rpc.RpcContext;
import org.apache.dubbo.rpc.protocol.rest.support.ContentType;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
/**
* 参数2 protocol代表用properties声明的 p1和p2这两个protocol ,
* 当然你也可以用一个,
*/
@Service(version = "rest", protocol = {
"p2","p1"})
@Path("demo") //路径
public class RestDemoService implements DemoService {
@GET // get请求
@Path("say") // 路径
@Produces({
ContentType.APPLICATION_JSON_UTF_8, ContentType.TEXT_XML_UTF_8})
@Override
public String sayHello(@QueryParam("name") String name) {
System.out.println("执行了rest服务" + name);
URL url = RpcContext.getContext().getUrl();
return String.format("%s: %s, Hello, %s", url.getProtocol(), url.getPort(), name); // 正常访问
}
}
启动项目开始测试
发现用postman也能调用成功. 用dubbo 的consumer也能调用成功,这个我就不演示了,自己去给代码下载下来跑起来运行下就知道结论了.
作者:张俊杰1994
来源链接:https://blog.csdn.net/qq_41489540/article/details/121894983