文章目录

  • 一、简单对象
    • 1. 依赖
    • 2. 生产者
    • 3. 消费者
    • 4. 配置文件
    • 5. spring版本
  • 二、复杂对象
    • 2.1. 生产者
    • 2.2. 消费者
一、简单对象
1. 依赖
       <!--spring整合rabbitmq--><dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-rabbit</artifactId><version>2.0.1.RELEASE</version></dependency>

注:maven方式,这一个依赖即可,如果是非maven项目,需要引入5个jar如下:

推荐使用mavne方式,简单,非Maven项目,先用maven把以来下载本地仓库,复制到非maven的项目中即可。

2. 生产者
<?xml version="1.0" encoding="UTF-8"?>
<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/rabbithttp://www.springframework.org/schema/rabbit/spring-rabbit-2.0.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsd"><!--生产者者配置如下:--><!-- 定义RabbitMQ的连接工厂 --><rabbit:connection-factory id="connectionFactory"host="${rabbitmq.host}"port="${rabbitmq.port}"username="${rabbitmq.username}"password="${rabbitmq.password}"virtual-host="${rabbitmq.vhost}"connection-timeout="${rabbitmq.conTimeout}"publisher-confirms="${rabbitmq.publisher-confirms}"publisher-returns="${rabbitmq.publisher-returns}"/><!-- 管理消息队列 --><rabbit:admin connection-factory="connectionFactory"/><!--此处为配置文件方式 管控台配置模式需要注释  默认模式管控台 Start--><!-- 定义一个队列或者多个队列  自动声明--><rabbit:queue name="Queue-1" auto-declare="true" durable="true"/><rabbit:topic-exchange name="exchange-1"><rabbit:bindings><!-- 可绑定多个队列,发送的时候指定key进行发送 --><rabbit:binding queue="Queue-1" pattern="ws.tjqb"/></rabbit:bindings></rabbit:topic-exchange><!--此处为配置文件方式 管控台配置模式需要注释  默认模式管控台 End--><!-- 定义交换机 自动声明--><rabbit:topic-exchange name="exchange-1"auto-declare="true" durable="true"/><!-- 5. 配置消息对象json转换类 --><bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" /><!-- 定义MQ消息模板1. id                 : 定义消息模板ID2.connection-factory  : 把定义的连接工厂放到消息模板中3.confirm-callback    : confirm确认机制4.return-callback     : return确认机制5.mandatory           :#有2种状态设置为 true 后 消费者在消息没有被路由到合适队列情况下会被return监听,而不会自动删除;设置为 false 后 消费者在消息没有被路由到合适队列情况下会自动删除--><rabbit:template id="rabbitTemplate"connection-factory="connectionFactory"exchange="exchange-1"confirm-callback="confirmCallBackListener"return-callback="returnCallBackListener"mandatory="true"message-converter="jsonMessageConverter"/>
</beans>
package com.gblfy.order.controller;import com.gblfy.order.pojo.FisCallingTrace;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.support.CorrelationData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;@RestController
public class Send {public static final String EXCHANGE = "exchange-1";@AutowiredRabbitTemplate rabbitTemplate;@RequestMapping("/test")public String test() {String uuidStr = UUID.randomUUID().toString();CorrelationData correlationId = new CorrelationData(uuidStr);// 发送消息Map<String, String> map = new HashMap<>();map.put("email", "550731230@qq.com");rabbitTemplate.convertAndSend(EXCHANGE, "ws.tjqb", map, correlationId);return "success";}
3. 消费者
<?xml version="1.0" encoding="UTF-8"?>
<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/rabbithttp://www.springframework.org/schema/rabbit/spring-rabbit-2.0.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsd"><!--消费者配置如下:--><!-- 定义RabbitMQ的连接工厂 --><rabbit:connection-factory id="connectionFactory"host="${rabbitmq.host}" port="${rabbitmq.port}" username="${rabbitmq.username}"password="${rabbitmq.password}" virtual-host="${rabbitmq.vhost}"connection-timeout="${rabbitmq.conTimeout}"publisher-confirms="${rabbitmq.publisher-confirms}"publisher-returns="${rabbitmq.publisher-returns}"/><!-- 管理消息队列 --><rabbit:admin connection-factory="connectionFactory"/><!-- 声明多个消费者对象 --><bean id="emailMessageListener" class="com.gblfy.order.mqhandler.EmailMessageListener"/><!-- 监听队列1. connectionFactory 连接工厂2. manual 手动签收3. ref="" 消费者监听--><rabbit:listener-container connection-factory="connectionFactory"acknowledge="manual"concurrency="${rabbitmq.concurrency}"max-concurrency="${rabbitmq.max-concurrency}"><rabbit:listener ref="emailMessageListener" method="onMessage" queue-names="Queue-1"/></rabbit:listener-container>
</beans>
package com.gblfy.order.mqhandler;import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;import java.io.IOException;
@Component
public class EmailMessageListener implements MessageListener {private static final ObjectMapper MAPPER = new ObjectMapper();@Overridepublic void onMessage(Message message) {try {JsonNode jsonNode = MAPPER.readTree(message.getBody());String email = jsonNode.get("email").asText();System.out.println("获取队列中消息:" + email);} catch (IOException e) {e.printStackTrace();}}
}
4. 配置文件
#RabbitMQ 连接信息
#IP地址
rabbitmq.host=192.168.0.114
#端口
rabbitmq.port=5672
#用户名
rabbitmq.username=fis
#密码
rabbitmq.password=ncl@1234
#虚拟主机
rabbitmq.vhost=/app/fisMQ
#连接超时时间
rabbitmq.conTimeout=15000
#发送确认 对应RabbitTemplate.ConfirmCallback接口
#消息发送成功 有2个重要参数
# ack 状态为true correlationId 全局唯一ID用于标识每一支队列
rabbitmq.publisher-confirms=true
#发送失败回退,对应RabbitTemplate.ReturnCallback接口
rabbitmq.publisher-returns=true
#默认消费者数量
rabbitmq.concurrency=10
#最大消费者数量
rabbitmq.max-concurrency=20
5. spring版本

目前适配的spring版本4.2.3.RELEASE

二、复杂对象

声明:配置文件不变

2.1. 生产者
package com.gblfy.order.controller;import com.gblfy.order.pojo.FisCallingTrace;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.support.CorrelationData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;@RestController
public class Send {public static final String EXCHANGE = "exchange-1";@AutowiredRabbitTemplate rabbitTemplate;@RequestMapping("/test")public String test() {FisCallingTrace f = getFisCallingTrace();String uuidStr = UUID.randomUUID().toString();CorrelationData correlationId = new CorrelationData(uuidStr);// 发送消息Map<String, Object> map = new HashMap<>();map.put("mReqXml", "请求报文");map.put("mResXml", "响应报文");map.put("mUUID", uuidStr);map.put("serviceName", "NYHC");map.put("fisCallingTrace", f);rabbitTemplate.convertAndSend(EXCHANGE, "ws.tjqb", map, correlationId);return "success";}// @RequestMapping("/test")// public String test() {//     String uuidStr = UUID.randomUUID().toString();//     CorrelationData correlationId = new CorrelationData(uuidStr);//     // 发送消息//     Map<String, String> map = new HashMap<>();//     map.put("email", "550731230@qq.com");//     rabbitTemplate.convertAndSend(EXCHANGE, "ws.tjqb", map, correlationId);//     return "success";// }private FisCallingTrace getFisCallingTrace() {FisCallingTrace f = new FisCallingTrace();f.setServicename("tjqb");f.setServicetype("1");f.setInterfacetype("2");f.setResstatus("1");f.setResremark("纽约数据回传接口");f.setReqdate(new Date());f.setReqtime("10:00:00");f.setResdate(new Date());f.setRestime("10:00:00");f.setReqxml("请求报文");f.setResxml("响应报文");return f;}}
2.2. 消费者
package com.gblfy.order.mqhandler;import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.gblfy.order.pojo.FisCallingTrace;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.ChannelAwareMessageListener;
import org.springframework.stereotype.Component;import java.io.IOException;@Slf4j
@Component
public class EmailMessageListener implements ChannelAwareMessageListener {private static final ObjectMapper MAPPER = new ObjectMapper();@Overridepublic void onMessage(Message message, Channel channel) throws Exception {try {JsonNode jsonNode = MAPPER.readTree(message.getBody());String mReqXml = jsonNode.get("mReqXml").asText();String mResXml = jsonNode.get("mResXml").asText();String mUUID = jsonNode.get("mUUID").asText();String serviceName = jsonNode.get("serviceName").asText();System.out.println("获取队列中消息:" + mReqXml);System.out.println("获取队列中消息:" + mResXml);System.out.println("获取队列中消息:" + mUUID);System.out.println("获取队列中消息:" + serviceName);JsonNode jsonNode1 = jsonNode.get("fisCallingTrace");String jsonStr = MAPPER.writeValueAsString(jsonNode1);FisCallingTrace f= MAPPER.readValue(jsonStr , FisCallingTrace.class);System.out.println("获取队列中消息:" + f.getReqxml());System.out.println("获取队列中消息:" + f.getResxml());// 消息的标识,false只确认当前一个消息收到,true确认所有consumer获得的消息channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);} catch (IOException e) {e.printStackTrace();}log.info("解析操作");log.info("落库操作");}
}

spring整合rabbitMQ最新版相关推荐

  1. RabbitMQ,RabbitMQ 的工作模式,Spring 整合 RabbitMQ,Springboot 整合RabbitMQ

    什么是RabbitMQ 1.1 MQ概述 MQ全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器.多用于分布式系统之间进行通信. ⚫ MQ,消息队列,存储消息的中间件 ⚫ ...

  2. Spring整合RabbitMQ(包含生产者和消费者)

    生产者 创建一个MAVEN项目spring-exchange-producer作为消息队列的生产者 导入相关的依赖坐标 <dependencies><!-- https://mvnr ...

  3. spring 整合 RabbitMQ 3.9.11

    spring 整合 RabbitMQ 3.9.11 rabbitmq 3.9.11 创建工程 不管用什么办法创建出一个空的工程出来,或者在已有工程里面创建一个新的module,下面只说创建新modul ...

  4. 消息队列-----生成者 Spring整合rabbitmq

    最近做Spring结合Rabbitmq,然后往队列里面发送了一个消息,如何查看消息 打开:http://127.0.0.1:15672 输入用户名和密码:找到你的队列 我们可以找到自己的队列,并且发现 ...

  5. RabbitMQ学习总结(7)——Spring整合RabbitMQ实例

    2019独角兽企业重金招聘Python工程师标准>>> 1.RabbitMQ简介 RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是AMQP(高级消 ...

  6. 【消息中间件】Spring整合RabbitMQ

    搭建生产者工程 添加依赖 修改pom.xml文件内容为如下: <?xml version="1.0" encoding="UTF-8"?><p ...

  7. Spring整合RabbitMQ

    在整合Spring/Springboot之前,我们加入相关的依赖在pom中: <dependencies><dependency><groupId>org.spri ...

  8. rabbitMQ教程 spring整合rabbitMQ代码实例

    转载自 https://www.cnblogs.com/tohxyblog/p/7256554.html 一.开启rabbitMQ服务,导入MQ jar包和gson jar包(MQ默认的是jackso ...

  9. Spring整合RabbitMQ,一看就懂

    1.pom.xml文件 <dependencies><dependency><groupId>org.springframework</groupId> ...

最新文章

  1. 详细介绍!Linux 上几种常用的文件传输方式
  2. 分布式缓存系统Memcached简介与实践(.NET memcached client library)
  3. Python数据库字段拆分数据
  4. Spark _13_topN
  5. Object c 基础知识
  6. c语言 函数的参数传递示例_isunordered()函数与C ++中的示例
  7. 信息学奥赛一本通(1315:【例4.5】集合的划分)
  8. redis 使用案例
  9. Exchange企业实战技巧(17)让密件抄送给特定用户
  10. 从酒店服务员到世界500强大数据工程师,月薪4K到年薪40W,我经历了什么?
  11. 乐视盒子u4刷Android,乐视盒子u4安装优酷
  12. 中国最美的100首情诗
  13. SpyNote V5.0图形化工具远程控制Android手机教程(图文教程+演示视频)
  14. B. A and B
  15. 新视野大学英语(1)课本单词汇总
  16. Windows打印机驱动开发
  17. 《房债》书中的精髓:现代金融系统让全世界的人同处一艘经济大船上,一些人搞坏了船,所有的人都跟着遭殃。
  18. 东方博宜 #1007统计大写英文字母的个数
  19. 奋斗吧,程序员——第三十章 多情自古伤离别,更哪堪冷落清秋节
  20. 实验A---- ADFA的可判定性

热门文章

  1. “阿法狗”之父:关于围棋,人类3000年来犯了一个错
  2. mysql sha256函数_MySQL8.0新特性——默认使用caching_sha2_password作为身份验证插件
  3. pytorch命令式和符号式混合编程
  4. 课堂笔记——计算机体系结构(1)
  5. RocketMQ学习
  6. 如何玩转 WebGL 并行计算
  7. 突破边界局限,阿里云神龙负责人张献涛分享15年虚拟化之路
  8. sqlite事务模型、性能优化tips、常见误区
  9. “大团队”和“敏捷开发”,谁说不可兼得?
  10. 阿里巴巴微服务开源项目盘点(持续更新)