Basic RPC
As a programming convenience, the Java client API offers a class RpcClient
which uses a temporary reply queue to provide simple RPC-style communication facilities via AMQP.
The class doesn't impose any particular format on the RPC arguments and return values. It simply provides a mechanism for sending a message to a given exchange with a particular routing key, and waiting for a response on a reply queue.
实现Rpc形式的发送与接收消息
/**
* 使用RpcClient发送消息
*
* @author sunjun
* @createtime 2010-4-27 上午11:21:05
*/
public class TestSender2 extends TestBase {
/**
* 发送一个消息
*
* @throws IOException
*/
public void sendMsg() throws IOException {
// 创建一个channel
Channel channel = getChannel();
// 设置return listener,用于监听回复(发生异常时)
channel.setReturnListener(new ReturnListener() {
@Override
public void handleBasicReturn(int replyCode, String replyText,
String exchange, String routingKey,
AMQP.BasicProperties properties, byte[] body)
throws IOException {
System.out
.println("-----------get exception reply message---------");
System.out.println("replyCode: " + replyCode);
System.out.println("replyText: " + replyText);
System.out.println("exchange: " + exchange);
System.out.println("routingKey: " + routingKey);
System.out.println("ContentEncoding: "
+ properties.getContentEncoding());
System.out.println("content type: "
+ properties.getContentType());
System.out.println("Expiration: " + properties.getExpiration());
System.out.println("type: " + properties.getType());
System.out.println("reply to: " + properties.getReplyTo());
System.out.println("body: " + new String(body));
}
});
// 定义一个queue
String queue = "test.queue";
channel.queueDeclare(queue);
// 定义一个exchange
String exchange = "test.exchange";
channel.exchangeDeclare(exchange, "direct");
// bind queue到exchange上
String routingKey = "test.routingkey";
channel.queueBind(queue, exchange, routingKey);
RpcClient rpcClient = new RpcClient(channel, exchange, routingKey);
try {
// 发送消息
String msg = "hello world!";
byte[] result = rpcClient.primitiveCall(msg.getBytes());
System.out.println(new String(result));
} catch (ShutdownSignalException e) {
e.printStackTrace();
}
System.out.println("send message success.");
// close
// close(channel);
}
/**
* @param args
*/
public static void main(String[] args) {
TestSender2 testSender = new TestSender2();
try {
testSender.sendMsg();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 使用RpcServer接收消息,并发送回复消息
*
* @author sunjun
* @createtime 2010-4-27 下午03:14:31
*/
public class TestReceiver3 extends TestBase {
/**
* 接收消息
*
* @throws IOException
*/
public void receive() throws IOException {
// 获取channel
Channel channel = getChannel();
// 定义一个queue,如果先启动receive端而又没有定义queue,会报错no queue 'test.queuea' in vhost
String queue = "test.queue";
channel.queueDeclare(queue);
System.out.println("receive message started.");
// 循环取消息
while (true) {
RpcServer rpcServer = new RpcServer(channel, queue) {
@Override
public byte[] handleCall(Delivery request,
BasicProperties replyProperties) {
// 接收消息
byte[] message = request.getBody();
// 发送返回消息
return super.handleCall(request, replyProperties);
}
};
}
}
public static void main(String[] args) throws IOException {
new TestReceiver3().receive();
}
}
分享到:
相关推荐
C# RabbitMQ发送和接收简单明了的示例, 演示了,轮流接收消息功能,和集群功能.
该服务接收来自客户端的消息请求并将消息发送到 RabbitMQ。 这些服务侦听 RabbitMQ 以获取消息并向客户端返回响应。 消费者服务。 该服务侦听来自 RabbitMQ 的消息并处理消息,然后将消息发送到 RabbitMQ。 要求: ...
主要介绍了c# rabbitmq 简单收发消息的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
RabbitMQ消息队列,在C#代码 中的使用。代码有发送端以及接收端两个控制台应用。资源内部包含RabbitMQ介绍以及安装部署服务器PDF教程。
主要介绍了使用PHP访问RabbitMQ消息队列的方法,结合实例形式分析了RabbitMQ消息队列的相关扩展安装、队列建立、队列绑定、消息发送、消息接收等相关操作技巧,需要的朋友可以参考下
springboot整合rabbitmq简单示例。交换机的模式使用的是Topic,消息发送使用RabbitTemplate,消息接收使用RabbitListener
信息测试演示使用RabbitMQ使用Spring发送和接收消息。设置这需要在您的IDE中安装Lombok才能进行编译; 有关详细信息,请参见 。 安装RabbitMQ( brew install rabbitmq ) 确保/usr/local/sbin在您的路径中启动代理...
如下图所示,您可以使用MQTT.fx作为MQTT客户端,在MQTT.fx客户端配置相关参数后接入微消息队列MQTT版实现消息的发送和接收。消息收发 微消息队列MQTT版同时提供了公网接入点和VPC 接入点。 在物联网和移动互联网的...
RabbitMQ 的 Golang 简单任务 Runner 示例 仅供个人使用(非通用解决方案)。 它能做什么: 加载本地配置文件 (config.json) 基于本地配置请求远程配置: 发送当前运行时信息(由收集的内存、cpu、网络设置) ...
这种方法利用RabbitMQ消息代理在微服务之间进行事件通信,并且所有服务都使用Docker进行了容器化,因此它们可以独立开发,部署,监控和扩展。 完整应用程序后端演示 以下视频演示显示了概念验证当前支持的所有功能...
当在适当的队列上接收到消息时,会收集一些系统数据(目前仅 CPU 温度)并将其返回给发送消息的客户端。 这种架构使得任何进程在任何地方运行(如 )都可以根据需要轻松访问此数据。 用织物安装 使用有一个安装任务...
在服务启动期间,它将服务名称和自动生成的UUID保留在其透视图数据库中,并将数据发送到RabbitMQ交换,后者随后根据路由密钥将数据广播到所有队列。 每个微服务都侦听自己的RabbitMQ队列,并在接收数据时不断更新...
可发送/接收一堆消息并测量花费时间的示例显示传奇的示例显示SimpleInjector如何与Rebus一起工作的示例-具有各种记录类型的样本演示“正好一次交付”的示例,其中SQL传输和在同一个事务中征集的用户工
纳米流x 微型高性能服务器,在节点处理块时将其流式传输到套接字,以供其他进程接收。 这个包并不是要单独使用,而是其他纳nano-stream npm包的基础库,这些纳nano-stream npm包接收该流并将其... 数据的解析示例:
Socket通信案例消息发送与接收 第8周 上节回顾 Socket实现简单的ssh客户端 Socket实现简单的ssh服务端 积极思考正能量 Socket实现简单的ssh2 Socket粘包 Socket粘包深入编码 SocketServer SocketServer多并发 多...
生产者生产者仅仅是将消息发送到消息代理的软件,例如微服务系统中的客户服务,该系统希望通过发送事件customer来告诉其他服务新客户是由新客户创建的。新创建的客户ID作为有效载荷。 使用者使用者是一种从消息代理...
python入门到高级全栈工程师培训视频学习资料;本资料仅用于学习,请查看后24小时之内删除。 【课程内容】 第1章 01 计算机发展史 02 计算机系统 03 小结 04 数据的概念 05 进制转换 06 原码补码反码 07 物理层和...
兔子队列Python '''示例使用RabbitMQ发送和接收JSON数据 创建virtualenv并运行pip install -r requirements.txt'''