首页 > 其他分享 >reactor rabbitmq 实现RPC远程调用

reactor rabbitmq 实现RPC远程调用

时间:2023-02-18 15:12:13浏览次数:49  
标签:reactor RpcServer rabbitmq try RPC IOException public channel

照着官方文档上写,最后发现在消费端怎么也返回不了数据。在文档中也找不到怎么返回数据,查看官方demo也没有案例,各种搜索都找不到。

最后在源码中发现有一个RpcServer类,经过一通研究终于跑通了,真不神人容易,消费端代码如下:

  • 第一步:定义一个类继承RpcServer,重写父类的handleCall方法,在这个方法中返回需要的数据和接收客户端的数据,代码如下:
public class HandbookRpcServer extends RpcServer {


    public HandbookRpcServer(Channel channel, String queueName) throws IOException {
        super(channel, queueName);
    }

    @Override
    public byte[] handleCall(Delivery request, AMQP.BasicProperties replyProperties) {
        String input = new String(request.getBody());
        System.out.println ("*** " + input + " ***");
        return ("*** " + "hello rabbitmq" + " ***").getBytes();
    }
}
  • 第二步,在handler中 起动监听,代码如下:
 @Autowired
 Mono<Connection> connectionMono;

    @PostConstruct
    public void run() {
     connectionMono.mapNotNull(f->{
           Channel channel = null;
           try {
               channel = f.createChannel();
           } catch (IOException e) {
               e.printStackTrace();
           }
          return channel;
       }).subscribe(channel -> {
         try {
             RpcServer rpcServer = new HandbookRpcServer(channel,RPC_QUEUE);
             new Thread(() -> {
                 try {
                     rpcServer.mainloop();
                 } catch (Exception e) {
                     // safe to ignore when loops ends/server is canceled
                 }
             }).start();
         } catch (IOException e) {
             e.printStackTrace();
         }
     });

    }


来自为知笔记(Wiz)

标签:reactor,RpcServer,rabbitmq,try,RPC,IOException,public,channel
From: https://www.cnblogs.com/baiyifengyun/p/17132671.html

相关文章

  • Yar的RPC的应用-php
    RPC,即RemoteProcedureCall(远程过程调用),调用远程计算机上的服务,就像调用本地服务一样。RPC可以很好的解耦系统。RPC可基于HTTP或TCP协议,WebService就是基于HTTP......
  • PHP+RabbitMQ消息发布与订阅简单示例
    我们有一个小说系统,每天会有很多作者发布新的小说内容,而读者因为个人爱好可能只订阅他喜欢的类型的小说,比如历史类、玄幻类小说。小说系统每天会根据用户的口味推送相关的小......
  • PHP与RabbitMQ消息队列简单示例
    ​​RabbitMQ​​提供跨语言接口,我们可以使用主流编程语言Java,C,C++,Python,PHP等和RabbitMQ做对接。RabbitMQ有消息确认机制、灵活的路由控制、以及消息集群高可用,使得很多大......
  • rabbitmq消息丢失
    发送消息后,队列中没有显示最后发现只能在flatMap中创建和关闭RpcClient。publicMono<ServerResponse>addCart(ServerRequestrequest){AtomicReference<Cart......
  • docker rabbitmq数据持久化
    RabbitMQ消息队列怎样做到服务宕机或重启消息不丢失RabbitMQ确保持久性消息能从服务器重启中恢复的方式是,将它们写入磁盘上的一个持久化日志文件。当发布一个持久性消息到......
  • Rpc-实现Zookeeper注册中心
    1.前言本文章是笔主在声哥的手写RPC框架的学习下,对注册中心的一个拓展。因为声哥某些部分没有保留拓展性,所以本文章的项目与声哥的工程有部分区别,核心内容在Curator的注册......
  • SpringBoot 整合 RabbitMQ
    SpringBoot整合RabbitMQ生产者application.yml#配置RabbitMQ的基本信息spring:rabbitmq:#iphost:192.168.36.100#usernameuse......
  • Spring 整合 RabbitMQ
    Spring整合RabbitMQ创建spring项目引入pompom依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns......
  • RabbitMQ
    RabbitMQMessagingthatjustworks—RabbitMQ案例pom.xml<dependencies><dependency><groupId>com.rabbitmq</group......
  • rabbitmq
    rabbitmq基础简介由LShift提供的一个消息队列协议(AMQP)的开源实现,由以高性能、健壮以及可伸缩性出名的Erlangrabbitmq包含的关键字消息队列使用过程组成部......