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整合实例,整个工程采用maven,具体过程看博文: http://blog.csdn.net/evankaka/article/details/50495437
介绍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
rabbitmq 与spring 使用maven集成示例源码 demo 示例。
spring整合rabbitmq需要的jar包(spring版本4.2.0)
Rabbitmq与Spring整合
关于RabbitMQ以及RabbitMQ和Spring的整合实例。。。。
https://www.jianshu.com/p/3841059f7ca3 整合spring和rabbitmq
RabbitMq的spring boot整合使用,测试成功,简单易懂哈
Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装Rabbit MQ的前提是安装Erlang
RabbitMQ入门到进阶(Spring整合RabbitMQ&SpringBoot整合RabbitMQ).doc
SpringBoot整合RabbitMQ 实现消息发送确认与消息接收确认机制 源码及教材 可以参考博客: https://blog.csdn.net/qq_29914837/article/details/93376741
RabbitMQ整合spring示例代码(java maven)
mysql需开启binlog 查看是否开启binlog ...3.3 rabbitmq配置 在virtualHost:/ 下新增Exchanges: canal.exchange 新增队列:test.queue, 绑定canal.queue, RoutingKey:canal.routing.key canal下载及配置 ...