Spring-Rabbit
导入依赖
<dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> </dependency>
rabbmitmq配置文件
rabbitmq.host=127.0.0.1 rabbitmq.port=5672 rabbitmq.username=mytest rabbitmq.passwd=mytest rabbitmq.vhost=/mytest
生产者 spring-rabbitmq配制文件
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="http://www.springframework.org/schema/rabbit" xsi:schemaLocation="http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit-1.4.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd"> <!-- 连接工厂 --> <rabbit:connection-factory id="connectionFactory" host="${rabbitmq.host}" port="${rabbitmq.port}" username="${rabbitmq.username}" password="${rabbitmq.passwd}" virtual-host="${rabbitmq.vhost}" /> <!-- MQ的管理,包括队列、交换器等 --> <rabbit:admin connection-factory="connectionFactory" /> <!-- durable:持久化 。队列或交换机是否要存储到磁盘也可以存储到内容--> <!-- 定义交换机 --> <rabbit:topic-exchange name="KAOLA-EXCHANGE-ITEM" auto-declare="true" durable="true" > </rabbit:topic-exchange> <!-- 定义模板 --> <rabbit:template id="template" connection-factory="connectionFactory" exchange="KAOLA-EXCHANGE-ITEM" > </rabbit:template> </beans>
发送消息内容到交换机
import com.fasterxml.jackson.databind.ObjectMapper; @Autowired private RabbitTemplate rabbitTemplate; private static final ObjectMapper MAPPER = new ObjectMapper(); private void sendMsg(Long itemId,String type){ try{ Map<String, Object> map = new HashMap<String, Object>(); map.put("itemId", itemId); map.put("type", type); this.rabbitTemplate.convertAndSend("item."+type,MAPPER.writeValueAsString(map)); }catch(Exception e){ e.printStackTrace(); } } 方法调用: //发送消息到交换机,通知其它系统该商品已经更新 sendMsg(item.getId(),"update"); //发送消息到交换机,通知其它系统该商品已经新增 sendMsg(item.getId(),"insert"); //发送消息到交换机,通知其它系统该商品已经删除 sendMsg(item.getId(),"delete");
消费者接收消息:
导入依赖
<dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> </dependency>
rabbmitmq配置文件
rabbitmq.host=127.0.0.1 rabbitmq.port=5672 rabbitmq.username=mytest rabbitmq.passwd=mytest rabbitmq.vhost=/mytest
消费者 spring-rabbitmq配制文件
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="http://www.springframework.org/schema/rabbit" xsi:schemaLocation="http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit-1.4.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd"> <!-- 连接工厂 --> <rabbit:connection-factory id="connectionFactory" host="${rabbitmq.host}" port="${rabbitmq.port}" username="${rabbitmq.username}" password="${rabbitmq.passwd}" virtual-host="${rabbitmq.vhost}" /> <!-- MQ的管理,包括队列、交换器等 --> <rabbit:admin connection-factory="connectionFactory" /> <!-- 定义队列 --> <rabbit:queue name="KAOLA-WEB-ITEM" auto-declare="true" durable="true" /> <bean id="itemHandler" class="com.kaola.portal.mq.handler.ItemHandler" /> <!-- 定义监听 --> <rabbit:listener-container connection-factory="connectionFactory"> <rabbit:listener ref="itemHandler" method="execute" queue-names="KAOLA-WEB-ITEM"/> </rabbit:listener-container> </beans>
具体处理逻辑:
import org.apache.commons.lang3.StringUtils; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; public class ItemHandler { private static final ObjectMapper MAPPER = new ObjectMapper(); public void execute(String msg){ try { JsonNode jsonNode = MAPPER.readTree(msg); Long itemId = jsonNode.get("itemId").asLong(); String type = jsonNode.get("type").asText(); if(StringUtils.equals(type, "update")||StringUtils.equals("insert", type)){ //TODO 根据itemId操作redis中的数据 }else if(StringUtils.equals(type, "delete")){ //TODO 根据itemId操作redis中的数据 } } catch (Exception e) { } } }
队列和交换机的绑定关系
实现:
1、 在配置文件中将队列和交换机完成绑定
<!-- 定义队列,自动声明 --> <rabbit:queue name="KAOLA-WEB-ITEM" auto-declare="true"></rabbit:queue> <!-- 定义队列、交换机、以及完成队列和交换机的绑定 --> <rabbit:topic-exchange name="KAOLA-EXCHANGE-ITEM" auto-declare="true" durable="true"> <rabbit:bindings> <!--<rabbit:binding queue="KAOLA-WEB-ITEM" pattern="item.*" />--> <rabbit:binding queue="KAOLA-WEB-ITEM" pattern="item.update" /> <rabbit:binding queue="KAOLA-WEB-ITEM" pattern="item.delete" /> </rabbit:bindings> </rabbit:topic-exchange>
2、 可以在管理界面中完成绑定
2.1)绑定关系如果发生变化,需要修改配置文件,并且服务需要重启
2.2)管理更加灵活
2.3)更容易对绑定关系的权限管理,流程管理
在界面管理工具中完成绑定关系
从 从交换机KAOLA-EXCHANGE-ITEM中完成绑定,如下图
相关推荐
在这个"rabbitmq与spring集成示例demo"中,我们将探讨如何将RabbitMQ集成到基于Spring的应用程序中,以便利用其消息传递能力。以下是一些关键知识点: 1. **Maven集成**:Maven是Java项目管理工具,用于构建、依赖...
**RabbitMQ与SpringMVC集成** RabbitMQ是一个开源的消息代理和队列服务器,它基于AMQP(Advanced Message Queuing Protocol)协议实现,广泛应用于分布式系统中的消息传递。RabbitMQ是由Erlang OTP平台构建的,因此...
将RabbitMQ与Spring集成,可以方便地在Spring应用中使用消息队列,实现高效的通信和任务处理。 集成RabbitMQ和Spring主要有以下几个关键步骤: 1. **添加依赖**:在Spring项目的Maven或Gradle配置文件中,引入...
将RabbitMQ与Spring整合,可以方便地在Spring应用中使用消息队列,实现异步通信和任务调度。 本实例主要介绍如何在Spring应用中集成RabbitMQ,构建一个完整的消息传递系统。首先,你需要确保已经安装了RabbitMQ...
介绍Spring Cloud Stream与RabbitMQ集成的代码示例。Spring Cloud Stream是一个建立在Spring Boot和Spring Integration之上的框架,有助于创建事件驱动或消息驱动的微服务。
rabbitmq spring rabbitmq spring rabbitmq spring rabbitmq spring http://knight-black-bob.iteye.com/blog/2304089
2. **Spring与RabbitMQ集成** - **Spring AMQP**:Spring提供了一套名为Spring AMQP的库,简化了RabbitMQ的集成。它包含了一个RabbitTemplate,用于发送和接收消息,以及一个 RabbitAdmin,用于自动管理Exchange、...
将RabbitMQ与Spring结合,可以简化消息系统的集成和管理,让开发者更加专注于业务逻辑。 **1. Spring对RabbitMQ的支持** Spring提供了`spring-amqp`模块,专门用于支持RabbitMQ的集成。这个模块包含了一些核心组件...
Spring提供了`spring-amqp`模块,使得与RabbitMQ的集成变得简单。以下是整合过程的主要步骤: 1. 添加依赖:在你的`pom.xml`或`build.gradle`文件中添加RabbitMQ和Spring AMQP的依赖。 2. 配置RabbitMQ:在Spring...
8. **测试与调试**:在`spring-rabbitmq`目录中,可能包含了单元测试或集成测试代码,用于验证RabbitMQ与Spring的集成是否正确,以及消息发送和接收功能是否正常。 通过以上步骤,我们可以构建一个完整的RabbitMQ与...
总结来说,这个项目是一个很好的学习资源,它演示了如何在Java环境中利用Spring和Spring AMQP与RabbitMQ协同工作,实现高效的消息传递。对于想要深入理解分布式系统、微服务架构和异步通信的开发者来说,这是一个...
其次,`spring-rabbit-1.4.5.RELEASE.jar`是Spring与RabbitMQ之间的桥梁,它扩展了Spring AMQP,提供了具体的实现细节,如RabbitTemplate,用于发送和接收消息,以及RabbitAdmin,用于管理RabbitMQ的实体,如交换器...
Spring Boot 集成各种框架 使用案例(spring-boot-rabbitmq、spring-boot-mail、spring-boot-thymeleaf、spring-boot-shiro)
本文将详细讲解如何在Spring项目中集成RabbitMQ,实现基于RPC(远程过程调用)的通信模式。 首先,我们需要在项目中引入Spring AMQP库,这是Spring对RabbitMQ的官方支持。可以通过在pom.xml文件中添加以下Maven依赖...