`
wbj0110
  • 浏览: 1596822 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

RabbitMQ 使用教程 与 spring整合

阅读更多

spring integration系列 之RabbitMQ and spring

文章中 很多人都不熟悉讲这个 大家云里雾里,我确实忽略了 这个问题,这一集 就是基础篇 基本的RabbitMQ

在实际工作中我们常常使用RabbitMQ发布以及监听消息

其实大多数时候 我用它来做大量的异步消息通讯 数据的临时存储 用途

下面第一步 添加相关依赖

 

1 <!-- Spring RabbitMQ -->
2         <dependency>
3             <groupId>org.springframework.amqp</groupId>
4             <artifactId>spring-rabbit</artifactId>
5             <version>${spring.amqp.version}</version>
6         </dependency>

这里需要添加好相关的依赖支持

 

在我们常用系统日志服务 系统监控消息中,我们常常需要记录系统的异常 消息,系统的执行方法 时间 以及相应的指标 下面看看这个过程的实现

在上面的过程中 我们可以用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"
07          
08         xsi:schemaLocation="
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" />
3     </bean>

这个编辑器真不好对齐这些代码。。。

下面加入相关的rabbitTemplate模板的整合

01 <rabbit:queue id="logErrorQueue"/>
02     <rabbit:queue id="logMessageQueue"/>
03      
04     <rabbit:topic-exchange name="zypExchange">
05         <rabbit:bindings>
06             <rabbit:binding queue="logErrorQueue" pattern="logerror.*"/>
07             <rabbit:binding queue="logMessageQueue" pattern="logMessageInfo.*"/>
08         </rabbit:bindings>
09     </rabbit:topic-exchange>
10      
11     <rabbit:template connection-factory="rabbitConnectionFactory" exchange="zypExchange"/>
12  
13     <rabbit:admin connection-factory="rabbitConnectionFactory"/>
14  
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;
03  
04 import org.springframework.stereotype.Service;
05  
06 import com.alibaba.fastjson.JSON;
07 import com.google.common.base.Splitter;
08  
09 @Service
10 public class JmsService
11 {
12  
13      
14     private  Queue<String> logs = new LinkedBlockingQueue<String>();//可以用其他的队列都行 jdk5的并发阻塞队列也行 在多线程环境下用它
15     public void handleMessageInfo(String logMessage){
01                  logs.add(logMessage)//这个消息队列可以判断大小 传递到下一节点
02         //前面我们知道我们传递过来的消息是record的对象json字符串+":"+时间
03         String[] strs=logMessage.split(":");
04         String record=strs[0];
05          Record rd=(Record) JSON.parse(record);
06          String time=strs[1];
07          recordService.saveRecord(time,record);//写入数据库中 或者其他应用 直接交给前端的controller也行
08     }
09      
10      
11  
12      
13 }

 

分享到:
评论

相关推荐

    RabbitMq与Spring整合实例

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

    RabbitMQ与SpringMVC集成

    1. 引入依赖:在项目中添加RabbitMQ的Spring整合依赖,如`spring-amqp`库。 2. 配置RabbitMQ:在Spring的配置文件中,定义连接工厂、信道配置以及RabbitMQ服务器的相关属性。 3. 创建消息模板:使用`RabbitTemplate`...

    介绍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集成示例demo

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

    spring整合rabbitmq的实例

    本文将详细介绍如何整合Spring与RabbitMQ,以实现高效的消息传递。 首先,我们要理解Spring对RabbitMQ的支持主要体现在Spring AMQP项目中,它为RabbitMQ提供了一套高级抽象层,使得开发者能够更加便捷地使用...

    spring整合rabbitmq需要的jar包(spring版本4.2.0)

    在"spring整合rabbitmq需要的jar包(spring版本4.2.0)"中,提到了几个核心的库文件,它们分别是: 1. **spring-rabbit-1.5.1.RELEASE.jar**:这是Spring对RabbitMQ的官方支持模块,它提供了与RabbitMQ集成的API和...

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

    将RabbitMQ与Spring整合,可以更好地管理和处理消息传递。 本示例代码基于Java和Maven构建,展示了如何在Spring项目中集成RabbitMQ。以下是集成过程的关键步骤和知识点: 1. **依赖管理**:首先,在Maven的`pom....

    Rabbitmq与Spring整合

    总之,将RabbitMQ与Spring整合可以极大地提高系统的灵活性和可扩展性。通过合理的设计和配置,我们可以构建出健壮、高效的分布式系统。在实践中,理解RabbitMQ的核心概念以及Spring AMQP的使用方式至关重要,这将有...

    springCloud+rabbitMq

    标题 "springCloud+rabbitMq" 暗示了这篇内容是关于如何在Spring Cloud框架中集成并使用RabbitMQ的教程。Spring Cloud是微服务架构中的一个组件集合,提供了服务发现、配置管理、断路器等核心功能,而RabbitMQ则是一...

    rabbitmq和spring集成

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

    RabbitMq 集成Spring

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

    RabbitMq整合使用

    **RabbitMQ整合使用详解** RabbitMQ是一个开源的消息队列系统,基于AMQP(Advanced Message Queuing Protocol)协议,广泛应用于分布式系统中,用于处理异步任务、解耦组件以及实现流量控制。在Spring Boot框架中...

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

    RabbitMQ作为一款广泛使用的开源消息代理,经常被集成到基于Java的Spring框架及其子框架Spring MVC中,以实现异步处理和分布式系统通信。下面将详细介绍RabbitMQ与Spring、Spring MVC结合的关键知识点。 1. **...

Global site tag (gtag.js) - Google Analytics