虽然大部分情况使用mq是要实现一些异步的效果,但是有的时候有的需求缺需要使用mq来实现同步的效果,项目中使用的是rabbitMq,这里说下怎么用rabbitMq实现同步的效果。
第一步:引入jar包
<dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>1.6.5.RELEASE</version> </dependency>
第二步:客户端的配置配置
<rabbit:connection-factory id="connectionFactory" username="${rabbit.service.conn.user}" password="${rabbit.service.conn.password}" host="${rabbit.service.conn.host}" port="${rabbit.service.conn.port}" /> <!-- reply-queue:服务端响应发送到的队列 reply-address:replyEx/routeReply --> <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" reply-queue="replyQueue" reply-address="${rabbit.queue.orderSettleReply}/${rabbit.rountKey.orderSettleReply}" correlation-key="correlationIdString" reply-timeout="10000"> <rabbit:reply-listener/> </rabbit:template> <rabbit:queue id="replyQueue" name="${rabbit.queue.orderSettleReply}" durable="true" auto-delete="false" exclusive="false"> </rabbit:queue>
第三步:代码编写(部分客户端代码)
MessageProperties messageProperties = new MessageProperties(); messageProperties.setDeliveryMode(MessageDeliveryMode.PERSISTENT); messageProperties.setExpiration(String.valueOf(30 * 1000)); // correlationIdString 是自动生成的,所以客户端代码不需要做处理,服务端代码需要拿请求后,取出correlationIdString,然后通过messageProperties.setHeader("correlationIdString", correlationIdString);传回给客户端 // String correlationIdString = ""; // messageProperties.setHeader("correlationIdString", correlationIdString); String json = new Gson().toJson(params); Message message = new Message(json.getBytes(), messageProperties); Message resMessage = amqpTemplate.sendAndReceive(exchange, routingKey, message); return isSuccess(resMessage);
通过这样的设置以及代码,客户端就能通过设置好的队列去取响应,根据设置好的correlation-key的值去关联请求响应,将相应同步反馈给对应的客户端
相关推荐
在学习这个项目的过程中,你可以通过阅读代码了解SpringBoot如何配置和调用Redis、Zookeeper和RabbitMQ的相关API,理解它们在分布式锁中的协同工作方式,这对于提升你的分布式系统设计和实现能力将大有裨益。
4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4...
Spring框架,作为Java领域广泛使用的轻量级框架,提供了强大的支持来实现这一目标。本文将深入探讨如何利用Spring AOP(面向切面编程)实现应用层的MySQL读写分离,并结合一主多从的配置来进行详细讲解。 首先,...
import org.springframework.amqp.rabbit.core.RabbitTemplate.ConfirmCallback; import org.springframework.amqp.rabbit.core.RabbitTemplate.ReturnCallback; import org.springframework.test.context....
4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4...
4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4...
4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4...
4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4...
4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4...
4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4...
4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4...
4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4...
4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4...
4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4...
4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4...
4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4...
当Zookeeper发生故障时,Dubbo能够继续正常运行,因为它会利用之前已同步到客户端的服务列表信息来维持服务间的调用。 #### 二、负载均衡策略 在Dubbo中,负载均衡是指将客户端的请求合理地分配到不同的服务提供者...