rpc使用rabbitmq实现

愤怒中的小草 愤怒中的小草     2022-11-12     603

关键词:

两天时间重写公司架构在本地实现测试学习

双向连接客户端和服务端配置:

  1. 连接rabbitmq服务器
  2. 定义消息队列
  3. 配置发送请求的模板:交换机、消息队列。
  4. 配置监听处理:监听的队列、消息转换处理
  5. 配置处理类:处理类、发布的接口。

RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议。
它允许像调用本地服务一样调用远程服务。它可以有不同的实现方式。如RMI(远程方法调用)、Hessian、Http invoker等。
另外,RPC是与语言无关的。
RPC实现
1.通信模型:假设通信的为A机器与B机器,A与B之间有通信模型,在Java中一般基于BIO或NIO;。
2.过程(服务)定位:使用给定的通信方式,与确定IP与端口及方法名称确定具体的过程或方法;
3.远程代理对象:本地调用的方法(服务)其实是远程方法的本地代理,因此可能需要一个远程代理对象,对于Java而言,远程代理对象可以使用Java的动态对象实现,封装了调用远程方法调用;
4.序列化,将对象名称、方法名称、参数等对象信息进行网络传输需要转换成二进制传输,这里可能需要不同的序列化技术方案。如:protobuf,Arvo等。
Java实现RPC框架
1、实现技术方案
   使用比较原始的方案实现RPC框架,采用Socket通信、动态代理与反射与Java原生的序列化。
2、RPC框架架构
RPC架构分为三部分:
1)服务提供者,运行在服务器端,提供服务接口定义与服务实现类。
2)服务中心,运行在服务器端,负责将本地服务发布成远程服务,管理远程服务,提供给服务消费者使用。
3)服务消费者,运行在客户端,通过远程代理对象调用远程服务。
rabbitmq实现重要点说明
连接点配置
<rabbit:connection-factory id="rabbitConnectionFactory"
        host="127.0.0.1" username="guest" password="guest" port="5672" />
<!-- 服务发布 -->
     <bean id="请调用我" class="com.batman.ClientFactoryBean">
        <property name="queueName" value="queue.batman" />
        <property name="serviceInterface"
            value="com.batman.service.api.Service" />
客户端发送请求模板配置
<rabbit:template id="amqpTemplate" connection-factory="rabbitConnectionFactory"
        queue="queue.batman" exchange="exchange" reply-timeout="60000" />
<!-- 配置监听容器,指定消息处理类,处理方法,还可以配置自动确认等-->
<rabbit:listener-container requeue-rejected="false"
        concurrency="1" message-converter="messageConverter">
        <rabbit:listener queues="queue.batman"
            ref="resolver" method="clearinstance" />
    </rabbit:listener-container>
定义消息队列
<!-- 定义消息队列 -->
    <rabbit:queue queue-arguments="amqpQueueArguments" id="transQueue"
        name="queue.batman" />
处理监听的处理类
<rabbit:listener-container requeue-rejected="false"
        <rabbit:listener queues="transQueue" ref="MessageService" />
    </rabbit:listener-container>
实际的处理类,并调用服务端发布的接口
<bean id="nonFinanicalService" class="com.batman.Service">
        <property name="service" ref="messageServiceImpl" />
        <property name="serviceInterface"
            value="com.batman.service.api.Service" />
    </bean>
<bean id="messageServiceImpl" class="com.batman.aipsweb.service.impl.MessageServiceImpl"> </bean>

最后在客户端实现类上面Resource具体的发布名称

rabbitmq学习:利用rabbitmq实现远程rpc调用(代码片段)

一、rabbitmq实现rpc调用的原理·rabbitmq实现rpc的原理是:客户端向一个队列中发送消息,并注册一个回调的队列用于接收服务端返回的消息,该消息需要声明一个叫做correaltionId的属性,该属性将是该次请求的唯一标识。服务端在... 查看详情

rabbitmq实现rpc

实现RPC首先要弄明白,RPC是个什么东西。(RPC)RemoteProcedureCallProtocol远程过程调用协议在一个大型的公司,系统由大大小小的服务构成,不同的团队维护不同的代码,部署在不同的机器。但是在做开发时候往往要用到其它团队的方... 查看详情

rabbitmq实现rpc

实现RPC首先要弄明白,RPC是个什么东西。(RPC)RemoteProcedureCallProtocol远程过程调用协议在一个大型的公司,系统由大大小小的服务构成,不同的团队维护不同的代码,部署在不同的机器。但是在做开发时候往往要用到其它团队的方... 查看详情

rabbitmq:rpc的实现(代码片段)

原文:RabbitMQ(四):RPC的实现一、RPC  RPC(RemoteProcedureCall)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。有很多方式可以实现,譬如UNIXRPC、RESTAPI、WCF和SOAP。这些传统... 查看详情

在 ASP.Net Core 3 中使用 Rabbitmq 的 RPC

】在ASP.NetCore3中使用Rabbitmq的RPC【英文标题】:RPCusingRabbitmqinASP.NetCore3【发布时间】:2021-06-0712:19:19【问题描述】:我想使用单个请求实现多个队列RPC服务器.cs如何从服务器发送多条消息例如。我创建了实例:`RPCServerrpcServer1=newR... 查看详情

rabbitmq普通使用

rabbitmq是一种消息队列服务,可以实现rpc,一般情况下openstack的rpc用的就是用它做的,它有很多的用途。除了Qpid以外它是唯一实现了AMQP标准的代理服务器1.安装安装rabbitmq是一件十分容易的事情,在yum源正常的情况下直接即可yumi... 查看详情

RabbitMQ RPC 以异步方式?

】RabbitMQRPC以异步方式?【英文标题】:RabbitMQRPCinanasyncway?【发布时间】:2020-09-0407:08:38【问题描述】:我正在为一个使用RabbitMQ和RPC的客户开发一个项目,我不太了解RabbitMQ,我正在努力在互联网上找到一些不错的示例。我需要... 查看详情

springboot|rabbitmq实现rpc方式远程同步调用

上篇相关文章 Springboot项目整合Rabbitmq详细教程服务端代码示例@ResourceprivateRabbitTemplaterabbitTemplate;/***同步 对外发送消息的方法*@parammsg 具体的消息内容*@throwsException*/publicStringsyncSend(Stringmsg)MessagePropertiesme 查看详情

springboot|rabbitmq实现rpc方式远程同步调用

上篇相关文章 Springboot项目整合Rabbitmq详细教程服务端代码示例@ResourceprivateRabbitTemplaterabbitTemplate;/***同步 对外发送消息的方法*@parammsg 具体的消息内容*@throwsException*/publicStringsyncSend(Stringmsg)MessagePropertiesme 查看详情

springboot+rabbitmq实现rpc调用(代码片段)

...都是RESTfulAPI、Dubbo、WebService、JavaRMI、CORBA等。其实,RabbitMQ也给我们提供了RPC功能,并且使用起来很简单。今天松哥通过一个简单的案例来和大家分享一下SpringBoot+RabbitMQ如何实现一个简单的RPC调用。注意关于RabbitMQ实... 查看详情

springboot+rabbitmq实现rpc调用(代码片段)

...都是RESTfulAPI、Dubbo、WebService、JavaRMI、CORBA等。其实,RabbitMQ也给我们提供了RPC功能,并且使用起来很简单。今天松哥通过一个简单的案例来和大家分享一下SpringBoot+RabbitMQ如何实现一个简单的RPC调用。注意关于RabbitMQ实... 查看详情

使用 EventMachine 和 RabbitMQ 的 RPC

】使用EventMachine和RabbitMQ的RPC【英文标题】:RPCusingEventMachine&RabbitMQ【发布时间】:2012-11-0221:53:17【问题描述】:我已经开始使用AMQPgemdoc中提供的RabbitMQRPCsamplecode,尝试编写非常简单的代码来执行同步远程调用:require"amqp"modul... 查看详情

基于rabbitmq的跨平台rpc框架

RabbitMQRpcprotocobufRabbitMQ实现RPChttps://www.cnblogs.com/LiangSW/p/6216537.html 基于RabbitMQ的RPChttps://blog.csdn.net/lmw1239225096/article/details/79453317 RabbitMQ之RPC实现https://blog.csdn.ne 查看详情

rabbitmq中rpc的实现及其通信机制(代码片段)

RabbitMQ中RPC的实现:客户端发送请求消息,服务端回复响应消息,为了接受响应response,客户端需要发送一个回调队列的地址来接受响应,每条消息在发送的时候会带上一个唯一的correlation_id,相应的服务端处理计算后会将结果返... 查看详情

使用 Node.js 的 RabbitMQ RPC

】使用Node.js的RabbitMQRPC【英文标题】:RabbitMQRPCusingNode.js【发布时间】:2017-09-0801:49:39【问题描述】:我使用RabbitMQ在Node.js中实现RPC。我按照教程,我为每个客户端声明相同的队列名称为\'rpc_client\'为了高权限,这里是client.js在... 查看详情

rabbitmq实现的rpc(代码片段)

1.主要思路1.生产者发布任务时,指定properties,告知消费者处理任务完毕之后,将结果存储到reply_to指定的Queue中,本次任务的id是correlation_id2.消费者消费完消息,即处理完任务,将结果存储到reply_to指定的Queue中,同时指定correlat... 查看详情

rabbitmq(pika) 使用 RPC 时抛出异常

】rabbitmq(pika)使用RPC时抛出异常【英文标题】:rabbitmq(pika)throwsanexceptionwhenuseRPC【发布时间】:2015-06-0714:57:13【问题描述】:当我构建发布者-消费者模式时,RabbiMQRPC抛出异常。这是我的代码:发件人.py#coding:utf-8importpikaimportuuidcla... 查看详情

rpc和消息队列(代码片段)

目录RPC和消息队列1消息队列2Rabbitmq2.1安装2.2基本使用2.3消息确认机制2.4持久化2.5闲置消费2.6发布订阅2.7关键字2.8模糊匹配2.9rabbitmq实现rpc3python中的rpc框架3.1SimpleXMLRPCServer3.2ZeroRPC实现rpcRPC和消息队列1消息队列1两个服务调用:restf... 查看详情