`
李大宝
  • 浏览: 14612 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

RabbitMQ与Spring集成

阅读更多

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中完成绑定,如下图



 
 
 

  • 大小: 23.9 KB
  • 大小: 25.2 KB
分享到:
评论

相关推荐

    rabbitmq与spring集成示例demo

    在这个"rabbitmq与spring集成示例demo"中,我们将探讨如何将RabbitMQ集成到基于Spring的应用程序中,以便利用其消息传递能力。以下是一些关键知识点: 1. **Maven集成**:Maven是Java项目管理工具,用于构建、依赖...

    RabbitMQ与SpringMVC集成

    **RabbitMQ与SpringMVC集成** RabbitMQ是一个开源的消息代理和队列服务器,它基于AMQP(Advanced Message Queuing Protocol)协议实现,广泛应用于分布式系统中的消息传递。RabbitMQ是由Erlang OTP平台构建的,因此...

    rabbitmq和spring集成

    将RabbitMQ与Spring集成,可以方便地在Spring应用中使用消息队列,实现高效的通信和任务处理。 集成RabbitMQ和Spring主要有以下几个关键步骤: 1. **添加依赖**:在Spring项目的Maven或Gradle配置文件中,引入...

    RabbitMq与Spring整合实例

    将RabbitMQ与Spring整合,可以方便地在Spring应用中使用消息队列,实现异步通信和任务调度。 本实例主要介绍如何在Spring应用中集成RabbitMQ,构建一个完整的消息传递系统。首先,你需要确保已经安装了RabbitMQ...

    介绍Spring Cloud Stream与RabbitMQ集成

    介绍Spring Cloud Stream与RabbitMQ集成的代码示例。Spring Cloud Stream是一个建立在Spring Boot和Spring Integration之上的框架,有助于创建事件驱动或消息驱动的微服务。

    rabbitmq spring demo

    rabbitmq spring rabbitmq spring rabbitmq spring rabbitmq spring http://knight-black-bob.iteye.com/blog/2304089

    rabbitMq与spring、springmvc结合的测试工程

    2. **Spring与RabbitMQ集成** - **Spring AMQP**:Spring提供了一套名为Spring AMQP的库,简化了RabbitMQ的集成。它包含了一个RabbitTemplate,用于发送和接收消息,以及一个 RabbitAdmin,用于自动管理Exchange、...

    RabbitMq 集成Spring

    将RabbitMQ与Spring结合,可以简化消息系统的集成和管理,让开发者更加专注于业务逻辑。 **1. Spring对RabbitMQ的支持** Spring提供了`spring-amqp`模块,专门用于支持RabbitMQ的集成。这个模块包含了一些核心组件...

    Rabbitmq与Spring整合

    Spring提供了`spring-amqp`模块,使得与RabbitMQ的集成变得简单。以下是整合过程的主要步骤: 1. 添加依赖:在你的`pom.xml`或`build.gradle`文件中添加RabbitMQ和Spring AMQP的依赖。 2. 配置RabbitMQ:在Spring...

    RabbitMQ整合spring示例代码(java maven)

    8. **测试与调试**:在`spring-rabbitmq`目录中,可能包含了单元测试或集成测试代码,用于验证RabbitMQ与Spring的集成是否正确,以及消息发送和接收功能是否正常。 通过以上步骤,我们可以构建一个完整的RabbitMQ与...

    java rabbitmq spring springAMQP 代码包 project

    总结来说,这个项目是一个很好的学习资源,它演示了如何在Java环境中利用Spring和Spring AMQP与RabbitMQ协同工作,实现高效的消息传递。对于想要深入理解分布式系统、微服务架构和异步通信的开发者来说,这是一个...

    rabbitmq+spring需要的jar包

    其次,`spring-rabbit-1.4.5.RELEASE.jar`是Spring与RabbitMQ之间的桥梁,它扩展了Spring AMQP,提供了具体的实现细节,如RabbitTemplate,用于发送和接收消息,以及RabbitAdmin,用于管理RabbitMQ的实体,如交换器...

    Spring Boot 集成各种框架 使用案例(spring-boot-rabbitmq、spring-boot-mail)

    Spring Boot 集成各种框架 使用案例(spring-boot-rabbitmq、spring-boot-mail、spring-boot-thymeleaf、spring-boot-shiro)

    spring集成rabbitmq实现rpc

    本文将详细讲解如何在Spring项目中集成RabbitMQ,实现基于RPC(远程过程调用)的通信模式。 首先,我们需要在项目中引入Spring AMQP库,这是Spring对RabbitMQ的官方支持。可以通过在pom.xml文件中添加以下Maven依赖...

Global site tag (gtag.js) - Google Analytics