spring integration系列 之RabbitMQ and spring
文章中 很多人都不熟悉讲这个 大家云里雾里,我确实忽略了 这个问题,这一集 就是基础篇 基本的RabbitMQ
在实际工作中我们常常使用RabbitMQ发布以及监听消息
其实大多数时候 我用它来做大量的异步消息通讯 数据的临时存储 用途
下面第一步 添加相关依赖
1 |
<!-- Spring RabbitMQ --> |
3 |
<groupId>org.springframework.amqp</groupId>
|
4 |
<artifactId>spring-rabbit</artifactId>
|
5 |
<version>${spring.amqp.version}</version>
|
这里需要添加好相关的依赖支持
在我们常用系统日志服务 系统监控消息中,我们常常需要记录系统的异常 消息,系统的执行方法 时间 以及相应的指标 下面看看这个过程的实现
在上面的过程中 我们可以用AOP + RabbitMQ +数据库 很方便的实现,
下面讲讲这个过程 常用简单的方式有实现 ThrowAdvice 捕获异常 实现AfterReturningAdvice获取返回后 MethodBeforeAdvice 方法执行前 ,你还能实现自定义拦截器 这是简单的使用用法 ,关于aop的几种方式网上好多 自行百度 谷歌
配置好Aop 然后 定义好相关记录的实体 如Record 有执行时间 方法 结果 其他信息 等等
运行时候aop监听 在执行监听方法前记录当前微秒数 执行后记录微秒 方法执行结果 方法名称 获取存入Record实体bean中
然后加入rabbitMQ的相关配置 ,这里我说一下 前一章的那张图,rabbitMQ 客户端通过 exchange 转发消息到相应的channel通道中 而exchange通过绑定与chanenl建立联系
下面看看我们的配置文件 首先加入rabbit头schema 命名空间
01 |
<? xml version = "1.0" encoding = "UTF-8" ?>
|
02 |
< beans xmlns = "http://www.springframework.org/schema/beans"
|
03 |
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
|
04 |
xmlns:p = "http://www.springframework.org/schema/p"
|
05 |
xmlns:context = "http://www.springframework.org/schema/context"
|
06 |
xmlns:rabbit = "http://www.springframework.org/schema/rabbit"
|
09 |
http://www.springframework.org/schema/beans
|
10 |
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
|
11 |
http://www.springframework.org/schema/context
|
12 |
http://www.springframework.org/schema/context/spring-context-3.1.xsd
|
13 |
http://www.springframework.org/schema/rabbit
|
14 |
http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd">
|
加入命名空间后,加入rabbitmq相关连接工厂
1 |
< bean id = "rabbitConnectionFactory" class = "org.springframework.amqp.rabbit.connection.CachingConnectionFactory" p:username = "admin" p:password = "admin" p:port = "5672" >
|
2 |
< constructor-arg value = "localhost" />
|
这个编辑器真不好对齐这些代码。。。
下面加入相关的rabbitTemplate模板的整合
01 |
< rabbit:queue id = "logErrorQueue" />
|
02 |
< rabbit:queue id = "logMessageQueue" />
|
04 |
< rabbit:topic-exchange name = "zypExchange" >
|
06 |
< rabbit:binding queue = "logErrorQueue" pattern = "logerror.*" />
|
07 |
< rabbit:binding queue = "logMessageQueue" pattern = "logMessageInfo.*" />
|
09 |
</ rabbit:topic-exchange >
|
11 |
< rabbit:template connection-factory = "rabbitConnectionFactory" exchange = "zypExchange" />
|
13 |
< rabbit:admin connection-factory = "rabbitConnectionFactory" />
|
15 |
< rabbit:listener-container >
|
16 |
< rabbit:listener queues = "logErrorQueue" ref = "jmsService" method = "handleError" />
|
17 |
< rabbit:listener queues = "logMessageQueue" ref = "jmsService" method = "handleMessageInfo" />
|
18 |
</ rabbit:listener-container >
|
下面就可以在方法中 前面的aop中 拦截器中 使用
@resource 或者@autoWire 或者@Inject注入模板amqpTemplate
1 |
amqpTemplate.convertAndSend(这是上面配置的exchange名称, 这是上面配置的队列名称, 这是我要发送的消息record+":"+new Date()); |
也就是说 amqpTemplate.convertAndSend("zypExchange","logMessageInfo.*","我要发送的消息 可以定制自己的格式 系列化方式"); 记住如果exchange传递“”空字符串那么代表使用默认default的exchange来委派channel也就是相当于没有绑定一样 当然你可以设置default的exchange的绑定方式,
当然还有amqpTemplate多种发送的方式
下面的交给上面配置rabbitMq监听器 JmsService类 的方法处理 我是用队列接受的
看下我的处理方式
JmsService
01 |
import java.util.Queue;
|
02 |
import java.util.concurrent.LinkedBlockingQueue;
|
04 |
import org.springframework.stereotype.Service;
|
06 |
import com.alibaba.fastjson.JSON;
|
07 |
import com.google.common.base.Splitter;
|
10 |
public class JmsService
|
14 |
private Queue<String> logs = new LinkedBlockingQueue<String>();
|
15 |
public void handleMessageInfo(String logMessage){
|
03 |
String[] strs=logMessage.split( ":" );
|
04 |
String record=strs[ 0 ];
|
05 |
Record rd=(Record) JSON.parse(record);
|
07 |
recordService.saveRecord(time,record);
|
分享到:
相关推荐
将RabbitMQ与Spring整合,可以方便地在Spring应用中使用消息队列,实现异步通信和任务调度。 本实例主要介绍如何在Spring应用中集成RabbitMQ,构建一个完整的消息传递系统。首先,你需要确保已经安装了RabbitMQ...
介绍Spring Cloud Stream与RabbitMQ集成的代码示例。Spring Cloud Stream是一个建立在Spring Boot和Spring Integration之上的框架,有助于创建事件驱动或消息驱动的微服务。
1. 引入依赖:在项目中添加RabbitMQ的Spring整合依赖,如`spring-amqp`库。 2. 配置RabbitMQ:在Spring的配置文件中,定义连接工厂、信道配置以及RabbitMQ服务器的相关属性。 3. 创建消息模板:使用`RabbitTemplate`...
rabbitmq spring rabbitmq spring rabbitmq spring rabbitmq spring http://knight-black-bob.iteye.com/blog/2304089
在这个"rabbitmq与spring集成示例demo"中,我们将探讨如何将RabbitMQ集成到基于Spring的应用程序中,以便利用其消息传递能力。以下是一些关键知识点: 1. **Maven集成**:Maven是Java项目管理工具,用于构建、依赖...
在"spring整合rabbitmq需要的jar包(spring版本4.2.0)"中,提到了几个核心的库文件,它们分别是: 1. **spring-rabbit-1.5.1.RELEASE.jar**:这是Spring对RabbitMQ的官方支持模块,它提供了与RabbitMQ集成的API和...
本文将详细介绍如何整合Spring与RabbitMQ,以实现高效的消息传递。 首先,我们要理解Spring对RabbitMQ的支持主要体现在Spring AMQP项目中,它为RabbitMQ提供了一套高级抽象层,使得开发者能够更加便捷地使用...
将RabbitMQ与Spring整合,可以更好地管理和处理消息传递。 本示例代码基于Java和Maven构建,展示了如何在Spring项目中集成RabbitMQ。以下是集成过程的关键步骤和知识点: 1. **依赖管理**:首先,在Maven的`pom....
总之,将RabbitMQ与Spring整合可以极大地提高系统的灵活性和可扩展性。通过合理的设计和配置,我们可以构建出健壮、高效的分布式系统。在实践中,理解RabbitMQ的核心概念以及Spring AMQP的使用方式至关重要,这将有...
标题 "springCloud+rabbitMq" 暗示了这篇内容是关于如何在Spring Cloud框架中集成并使用RabbitMQ的教程。Spring Cloud是微服务架构中的一个组件集合,提供了服务发现、配置管理、断路器等核心功能,而RabbitMQ则是一...
将RabbitMQ与Spring集成,可以方便地在Spring应用中使用消息队列,实现高效的通信和任务处理。 集成RabbitMQ和Spring主要有以下几个关键步骤: 1. **添加依赖**:在Spring项目的Maven或Gradle配置文件中,引入...
将RabbitMQ与Spring结合,可以简化消息系统的集成和管理,让开发者更加专注于业务逻辑。 **1. Spring对RabbitMQ的支持** Spring提供了`spring-amqp`模块,专门用于支持RabbitMQ的集成。这个模块包含了一些核心组件...
**RabbitMQ整合使用详解** RabbitMQ是一个开源的消息队列系统,基于AMQP(Advanced Message Queuing Protocol)协议,广泛应用于分布式系统中,用于处理异步任务、解耦组件以及实现流量控制。在Spring Boot框架中...
RabbitMQ作为一款广泛使用的开源消息代理,经常被集成到基于Java的Spring框架及其子框架Spring MVC中,以实现异步处理和分布式系统通信。下面将详细介绍RabbitMQ与Spring、Spring MVC结合的关键知识点。 1. **...