RabbitMQ案例七之RPC远程过程调用
来源:互联网 发布:休斯顿国际电影节知乎 编辑:程序博客网 时间:2024/06/06 13:04
目的:到服务器请求数据
Client的代码如下:
package yy.rabbitstudy.rpc;import com.rabbitmq.client.AMQP.BasicProperties;import com.rabbitmq.client.Channel;import com.rabbitmq.client.QueueingConsumer;import yy.rabbitstudy.util.RabbitMQUtil;public class RPCClient { private Channel channel; private String requestQueueName = "rpc_queue"; private String replyQueueName; private QueueingConsumer consumer; public RPCClient() throws Exception { channel=RabbitMQUtil.getChannel(); replyQueueName = channel.queueDeclare().getQueue(); consumer = new QueueingConsumer(channel); channel.basicConsume(replyQueueName, true, consumer); } public String call(String message) throws Exception { String response = null; String corrId = java.util.UUID.randomUUID().toString(); BasicProperties props = new BasicProperties .Builder() .correlationId(corrId) .replyTo(replyQueueName) .build(); channel.basicPublish("", requestQueueName, props, message.getBytes()); while (true) { QueueingConsumer.Delivery delivery = consumer.nextDelivery(); if (delivery.getProperties().getCorrelationId().equals(corrId)) { response = new String(delivery.getBody()); break; } } return response; } public static void main(String[] args) throws Exception { RPCClient client=new RPCClient(); String response = client.call("15"); System.out.println(response); }}
Server的代码如下:
package yy.rabbitstudy.rpc;import java.io.IOException;import com.rabbitmq.client.AMQP.BasicProperties;import com.rabbitmq.client.Channel;import com.rabbitmq.client.ConsumerCancelledException;import com.rabbitmq.client.QueueingConsumer;import com.rabbitmq.client.ShutdownSignalException;import yy.rabbitstudy.util.RabbitMQUtil;public class RPCServer { private static final String RPC_QUEUE_NAME = "rpc_queue"; public static void main(String[] args) { Channel channel = RabbitMQUtil.getChannel(); try { channel.queueDeclare(RPC_QUEUE_NAME,false,false,false,null); channel.basicQos(1); QueueingConsumer consumer=new QueueingConsumer(channel); channel.basicConsume(RPC_QUEUE_NAME, false, consumer); System.out.println(" [x] Awaiting RPC requests"); while(true){ QueueingConsumer.Delivery delivery=consumer.nextDelivery(); BasicProperties properties = delivery.getProperties(); BasicProperties replyProps=new BasicProperties .Builder() .correlationId(properties.getCorrelationId()) .build(); String message=new String(delivery.getBody()); int n=Integer.parseInt(message); String response=""+fib(n); channel.basicPublish("", properties.getReplyTo(), replyProps, response.getBytes()); channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false); } } catch (IOException e) { e.printStackTrace(); } catch (ShutdownSignalException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ConsumerCancelledException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { RabbitMQUtil.close(); } } private static int fib(int n) { if (n == 0) return 0; if (n == 1) return 1; return fib(n-1) + fib(n-2); }}
0 0
- RabbitMQ案例七之RPC远程过程调用
- rabbitMQ学习笔记(七) RPC 远程过程调用
- rabbitMQ学习笔记(七) RPC 远程过程调用
- RabbitMQ(七)—远程过程调用RPC
- RabbitMQ 远程过程调用RPC
- RabbitMQ学习之远程过程调用(RPC)(java)
- RabbitMQ学习(六)之远程过程调用(RPC)(java)
- RabbitMQ (六) 远程过程调用(RPC)
- RabbitMQ入门教程(八):远程过程调用RPC
- 轻松搞定RabbitMQ(七)——远程过程调用RPC
- RabbitMQ学习之基于spring-rabbitmq的RPC远程调用
- RabbitMQ学习之基于spring-rabbitmq的RPC远程调用
- RabbitMQ学习之基于spring-rabbitmq的RPC远程调用
- rabbitmq(六)RPC(Remote procedure call,远程过程调用)
- .Net下RabbitMQ的使用(7) -- 远程过程调用RPC
- 远程过程调用(RPC)
- Rpc远程过程调用
- RPC远程过程调用
- 复制粘贴功能
- BigDecimal用法之计算等额本金和等额本息
- SPSS:T检验、方差分析、非参检验、卡方检验的使用要求和适用场景
- 浅析Fragment中startActivityForResult()与getActivity().startActivityForResult()的异同
- MCWebBridgeNative ,webview内容与本地交互,有非常非常爽的功能 (附 源码)
- RabbitMQ案例七之RPC远程过程调用
- 代理Hook
- React Native 中遇到的问题
- Mysql-Client编码问题
- PHP基础补全系列:异常处理
- httpClient 绕证书
- HTML初探
- 第一节 javascript的简史
- 初学构建小项目之仓库管理系统货物管理功能实现(四)