导入jar包


※ rabbitMq各版本与jdk适配不一样, 本文指定适配jdk1.7,所以使用了4.12.0版本。其他JDK请自行适配对应jar包版本

rabbit 4.x 最低适配 jdk1.6
rabbit 5.x 最低适配 jdk1.8

设置spring-rabbit.xml配置文件

<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"xmlns:task="http://www.springframework.org/schema/task"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/rabbithttp://www.springframework.org/schema/rabbit/spring-rabbit-1.4.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.1.xsdhttp://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><context:property-placeholderignore-resource-not-found="true"location="classpath*:/application.properties" /><!--启用注解监听消息--><rabbit:annotation-driven/><!-- 配置连接工厂 链接属性从application.properties中取 --><rabbit:connection-factory id="connectionFactory"host="${rabbit.host}"port="${rabbit.port}"username="${rabbit.username}"password="${rabbit.password}"virtual-host="${rabbit.virtual-host}"/><!-- 定义mq管理 --><rabbit:admin id="connectAdmin" connection-factory="connectionFactory" auto-startup="true"/><!-- 声明消息通知队列 --><rabbit:queue name="work.order.queue" durable="true" declared-by="connectAdmin"/><!-- 声明延迟消息队列 (死信队列) --><rabbit:queue name="work.order.queue.ttl" durable="true" declared-by="connectAdmin"><rabbit:queue-arguments><!-- 绑定交换机和路由 --><entry key="x-dead-letter-exchange" value="work.order.direct.ttl" /><entry key="x-dead-letter-routing-key" value="work.order.topic" /></rabbit:queue-arguments></rabbit:queue><!-- 定义交换机 --><rabbit:topic-exchange name="work.order.direct" id="work.order.direct"><rabbit:bindings><!-- 绑定队列(通配符模式) #匹配一个或多个词  *匹配一个词 --><rabbit:binding queue="work.order.queue" pattern="work.order.topic"/></rabbit:bindings></rabbit:topic-exchange><rabbit:direct-exchange name="work.order.direct.ttl" durable="true"><rabbit:bindings><!-- 绑定延迟消息队列 --><rabbit:binding queue="work.order.queue.ttl" key="work.order.topic.ttl" /><rabbit:binding queue="work.order.queue" key="work.order.topic" /></rabbit:bindings></rabbit:direct-exchange><!-- 消息对象json转换类 --><bean id="jsonMessageConverter"class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" /><!-- 定义模版 并设置默认交换机 --><rabbit:template id="rabbitTemplate" connection-factory="connectionFactory" message-converter="jsonMessageConverter" exchange="work.order.direct" /><!-- 定义消费者 --><bean name="delayConsumer" class="com.yc.ssm.framwork.mq.WorkOrderListener" /><!-- 定义消费者监听队列 --><rabbit:listener-container connection-factory="connectionFactory"><rabbit:listener ref="delayConsumer" queues="work.order.queue" /></rabbit:listener-container><!--消息监听容器,配合注解监听消息--><bean id="rabbitListenerContainerFactory" class="org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory"><property name="connectionFactory" ref="connectionFactory"/><!--并发消费者数量--><property name="concurrentConsumers" value="3"/><!--最大数量--><property name="maxConcurrentConsumers" value="10"/><!--消息转换--><property name="messageConverter" ref="jsonMessageConverter"/><!--任务线程池--><property name="taskExecutor"><task:executor id="amqpTaskExecutor" pool-size="150"/></property><!--自动确认--><property name="acknowledgeMode" value="AUTO"/></bean>
</beans>

消费者监听器

package com.yc.ssm.framwork.mq;import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import java.nio.charset.StandardCharsets;/*** 延迟队列* @author xyang* 2022-04-25 15:02*/
public class WorkOrderListener implements MessageListener {@AutowiredRabbitTemplate rabbitTemplate;@Overridepublic void onMessage(Message message) {try {String body = new String(message.getBody(), StandardCharsets.UTF_8);System.out.println("[work.order.queue] 队列消息 : " + body);} catch (Exception e) {e.printStackTrace();}}
}

消息生产者

package com.yc.ssm.framwork.mq;import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.AmqpException;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessagePostProcessor;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.util.Date;/*** 生产者* @author xyang* 2022-04-24 15:50*/
@Component
public class MqWorkOrderSender {private final Logger logger = LoggerFactory.getLogger(MqWorkOrderSender.class);@Autowiredprivate RabbitTemplate rabbitTemplate;/*** 将 Java 对象转换为 Amqp Message并将其发送到指定路由键的默认交换器* @author xyang* @param routeKey 路由 如:work.order.topic* @param data 消息对象* 2022-04-24 15:55*/public void send(String routeKey, Object data) {rabbitTemplate.convertAndSend(routeKey, data);}/*** 发送延迟消息* @author xyang* @param exchange 交换机地址 如:work.order.direct.ttl * @param routeKey 路由 如:work.order.topic.ttl* @param data 消息对象* @param delayTime 延迟时间* 2022-04-24 16:00*/public void convertAndSendAtDelay(String exchange, String routeKey, Object data, final long delayTime) {rabbitTemplate.convertAndSend(exchange, routeKey, data,new MessagePostProcessor() {@Overridepublic Message postProcessMessage(Message message) throws AmqpException {//给消息设置延迟毫秒值message.getMessageProperties().setTimestamp(new Date());message.getMessageProperties().setExpiration(String.valueOf(delayTime));return message;}});logger.info("send delay object: {}", JSON.toJSONString(data));}
}

web.xml 设置扫描spring-rabbit.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>cyy</display-name><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:/applicationContext*.xml,classpath*:/spring-*.xml</param-value></context-param><context-param><param-name>spring.profiles.default</param-name><param-value>test</param-value></context-param><filter><filter-name>shiroFilter</filter-name><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class><init-param><param-name>targetFilterLifecycle</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>shiroFilter</filter-name><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher></filter-mapping><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><listener><listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class></listener><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><session-config><session-timeout>60</session-timeout></session-config><servlet><servlet-name>springMvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springMvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springMvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping><servlet><servlet-name>captcha</servlet-name><servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class></servlet><servlet-mapping><servlet-name>captcha</servlet-name><url-pattern>/static/captcha.jpg</url-pattern></servlet-mapping><servlet><servlet-name>DruidStatView</servlet-name><servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class></servlet><servlet-mapping><servlet-name>DruidStatView</servlet-name><url-pattern>/druid/*</url-pattern></servlet-mapping><welcome-file-list><welcome-file>default.jsp</welcome-file><welcome-file>index.jsp</welcome-file></welcome-file-list><jsp-config><jsp-property-group><url-pattern>*.jsp</url-pattern><page-encoding>UTF-8</page-encoding><scripting-invalid>false</scripting-invalid><trim-directive-whitespaces>true</trim-directive-whitespaces></jsp-property-group></jsp-config>
</web-app>

SSM (JDK 1.7) 使用Rabbit MQ相关推荐

  1. Spring Boot:使用Rabbit MQ消息队列

    综合概述 消息队列 消息队列就是一个消息的链表,可以把消息看作一个记录,具有特定的格式以及特定的优先级.对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息,对消息队列有读权限的进程则可以 ...

  2. Rabbit MQ 学习 (一)Window安装Erlang环境

    之前也没有用过Rabbit MQ ,最近正在学习中,记性不好,特意记一下. 百度一下 先得 安装 Erlang 并且 设置环境变量. 在Erlang 官网去下载,那个慢呀... 还好CSDN 里有人提 ...

  3. spring集成mq_使用Spring Integration Java DSL与Rabbit MQ集成

    spring集成mq 我最近参加了在拉斯维加斯举行的2016年Spring大会 ,很幸运地看到了我在软件世界中长期敬佩的一些人. 我亲自遇到了其中的两个人,他们实际上合并了几年前我与Spring In ...

  4. Rabbit MQ windows下安装

    Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装Rabbit MQ的前提是安装Erlang.通过下面两个连接可以下载安装最新的版本: 下载并安装 Eralng OTP For W ...

  5. Rabbit MQ 配置

    主要介绍Rabbit MQ在Aliyun实例中的安装配置 1.安装erlang, Rabbitmq. 1.1 安装erlang a.执行sudo apt-get update b.执行sudo apt ...

  6. rabbit mq 入门

    RabbitMQ 是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能.健壮以及可伸缩性出名的 Erlang 写成, ...

  7. 在 Windows 上安装Rabbit MQ 指南

    转载自张善友博客园:http://www.cnblogs.com/shanyou/p/4067250.html rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.他遵循Moz ...

  8. springboot+Rabit实战二:(Rabbit MQ web 界面管理)

    本章基于博主上一篇文章:springboot+Rabit实战一:(Rabbit MQ windows 环境搭建)继续深入,介绍rabbit MQ web界面管理操作 一:先了解Rabbit MQ 中一 ...

  9. springboot+Rabit实战一:(Rabbit MQ windows 环境搭建)

    一:下载erlang 语言并安装: 地址:http://www.erlang.org/downloads 安装时,是可视化界面一步步安装即可,如果没有配置ERLANG_HOME,则需要配置,并在pat ...

最新文章

  1. “三巨头”联合发布万字长文,深度学习将通往何方?
  2. Linux从入门到精通系列之线性表链式存储结构-单链表原理解析
  3. S3 Texture Compression
  4. spring5企业级开发实战 pdf_终于总结出Spring全家桶+微服务设计模式+Netty+MySQL调优PDF...
  5. 高效大规模图像搜索开源实现
  6. 小汤学编程之JDBC(一)——JDBC概述和快速入门
  7. san服务器型号,san存储服务器配置
  8. 举枪消灭烂代码的实战案例
  9. 第四次博客:循环单链表解决约瑟夫环问题
  10. WCF与AJAX编程开发实践(2):支持ASP.NET AJAX的Web Service
  11. 仍然提供32位Linux发行版,Ubuntu 20.04彻底淘汰32位映像,只提供64位映像下载
  12. MFC中.和-的区别
  13. SQL Server 查询分析工具
  14. 一条查询SQL的执行流程
  15. 腾讯云mysql最大数据量_被低估的腾讯云数据库
  16. matlab | 图像处理工具箱
  17. 华为大数据研发第1轮面试
  18. 怎样做音乐相册?简单又好看的音乐相册怎么做?
  19. Qt 界面获取键盘Enter键
  20. ssh 反向代理连接内网服务器并配置开机自启动(解决autossh无法开机自启动)

热门文章

  1. 第二十八篇 网页实战之静态网页爬取,四大案例,小说,书,图片等抓取操作
  2. 当我闲困的时候,我在想些什么
  3. Ubuntu中使用john the ripper口令破解
  4. iOS 切换到后台任务执行
  5. Python灰帽子pdf
  6. 分区重分配(二十二)
  7. 量化交易:10000资金起步,五年看看能做到多少?
  8. 不是程序员还真看不懂的搞笑段子
  9. 买房知识总结,学习笔记【6000字】【原创】
  10. 认识广东民系,了解潮汕人