如何使用http和Postman直接调用dubbo服务?

如何使用http直接调用dubbo服务?

我们都知道dubbo服务默认是dubbo协议,如果我们使用http直接调用dubbo服务,需要把协议改为http,如下图

在这里插入图片描述
我们在官方的提供的项目demo模块中,把privoder.xml中protocol改为http协议,以及http服务器改为Tomcat(默认是Jetty) 然后我们启动
在这里插入图片描述
启动Privoder类,我们这里启动成功,注册一个DemoService实现类
在这里插入图片描述

我们启动消费者,使用自己封装好的http去直接去调用

在这里插入图片描述

这里我们已经就调用成功,并且输出了返回值,我们这里生成了一个代理对象,并且执行了sayHello方法,我们去看一下代理是如何实现的
在这里插入图片描述
我们实现InvocationHandler接口并实现他的invoke方法
我们方法里面调用了一些方法,我们去大致看一下这些方法,首先是checkParam方法
在这里插入图片描述
里面去检查了一些参数,然后并把这些值赋值给了对象本身,这里不多说了,继续看createRemoteInvocation方法

在这里插入图片描述
这个方法比较重要,他给我们创建了一个RemoteInvocation对象
这个对象非常重要,我们先看看他的结构
在这里插入图片描述
解释一下这三个属性
methodName:其实就是我们调用远程方法的名称
parameterTypes:这个是调用远程方法参数的Class类型数组
arguments:这个就是调用远程方法所传递的参数值

接着继续看上面我们的赋值,我们创建RemoteInvocation对象的时候,我们把当前调用的方法以及调用的参数类型及参数值已经set进去了,然后我们只需要把当前对象序列化传递给服务器就可以了,继续看代码
在这里插入图片描述
我们这里创建了Http请求连接,url为服务器ip+需要调用的类Class路径名称(http://192.168.0.108:20880/com.alibaba.dubbo.demo.DemoService)
继续往后面走
在这里插入图片描述
这里很重要,这里我们把上面创建的RemoteInvocation对象通过ObjectOutputStream对象序列化了,并使用http的OutputStream流写入了进去,然后我们建立连接,发送数据到服务器

在这里插入图片描述
处理结果,服务器返回数据,我们使用ObjectInputStream反序列化读取数据,其实服务器返回给我的对象是RemoteInvocationResult
,我们可以看看这个对象
在这里插入图片描述
value值就是服务器处理以后的结果,服务器是在哪里处理的呢
在这里插入图片描述
然后进去

在这里插入图片描述

总结下:
dubbo使用http协议,序列化使用的是ObjectOutputStream序列化
反序列化使用的是ObjectInputStream,客户端发起调用的对象是RemoteInvocation,服务器返回的对象是RemoteInvocationResult

思考下:
因为现在我们使用的是JDK自带的API序列化和反序列化,使用其他语言是无法调用的,那我们如何使用其他语言调用呢是否我们可以把序列化和反序列化改为Json格式?这样是否可以实现跨语言调用呢?同学们!
事实上是可以的:
我这里使用Postman调用dubbo服务,现在已经调用成功了,而且也返回了结果
在这里插入图片描述
改造过程
在这里插入图片描述
其实就是把HttpProtocol序列化和反序列化改为Json即可

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值