原文地址:https://my.oschina.net/never/blog/140368

1.首先是生产者配置

<?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:context="http://www.springframework.org/schema/context"

       xmlns:rabbit="http://www.springframework.org/schema/rabbit"

       xsi:schemaLocation="

            http://www.springframework.org/schema/beans

                http://www.springframework.org/schema/beans/spring-beans.xsd

            http://www.springframework.org/schema/context

                http://www.springframework.org/schema/context/spring-context.xsd            

            http://www.springframework.org/schema/rabbit

                http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd">

 

    
 

   <!-- 连接服务配置  -->

   <rabbit:connection-factory id="connectionFactory" host="localhost" username="guest"

        password="guest" port="5672"  />

        
 

   <rabbit:admin connection-factory="connectionFactory"/>

   
 

   <!-- queue 队列声明-->

   <rabbit:queue id="queue_one" durable="true" auto-delete="false" exclusive="false" name="queue_one"/>

   
 

   
 

   <!-- exchange queue binging key 绑定 -->

    <rabbit:direct-exchange name="my-mq-exchange" durable="true" auto-delete="false" id="my-mq-exchange">

        <rabbit:bindings>

            <rabbit:binding queue="queue_one" key="queue_one_key"/>

        </rabbit:bindings>

    </rabbit:direct-exchange>

    
 

    <-- spring amqp默认的是jackson 的一个插件,目的将生产者生产的数据转换为json存入消息队列,由于fastjson的速度快于jackson,这里替换为fastjson的一个实现 -->

    <bean id="jsonMessageConverter"  class="mq.convert.FastJsonMessageConverter"></bean>

    
 

    <-- spring template声明-->

    <rabbit:template exchange="my-mq-exchange" id="amqpTemplate"  connection-factory="connectionFactory"  message-converter="jsonMessageConverter"/>

</beans>

2.fastjson messageconver插件实现

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.springframework.amqp.core.Message;

import org.springframework.amqp.core.MessageProperties;

import org.springframework.amqp.support.converter.AbstractMessageConverter;

import org.springframework.amqp.support.converter.MessageConversionException;

 

import fe.json.FastJson;

 

public class FastJsonMessageConverter  extends AbstractMessageConverter {

    private static Log log = LogFactory.getLog(FastJsonMessageConverter.class);

 

    public static final String DEFAULT_CHARSET = "UTF-8";

 

    private volatile String defaultCharset = DEFAULT_CHARSET;

    

    public FastJsonMessageConverter() {

        super();

        //init();

    }

    

    public void setDefaultCharset(String defaultCharset) {

        this.defaultCharset = (defaultCharset != null) ? defaultCharset

                : DEFAULT_CHARSET;

    }

    

    public Object fromMessage(Message message)

            throws MessageConversionException {

        return null;

    }

    

    public <T> T fromMessage(Message message,T t) {

        String json = "";

        try {

            json = new String(message.getBody(),defaultCharset);

        } catch (UnsupportedEncodingException e) {

            e.printStackTrace();

        }

        return (T) FastJson.fromJson(json, t.getClass());

    }    

    
 

 

    protected Message createMessage(Object objectToConvert,

            MessageProperties messageProperties)

            throws MessageConversionException {

        byte[] bytes = null;

        try {

            String jsonString = FastJson.toJson(objectToConvert);

            bytes = jsonString.getBytes(this.defaultCharset);

        } catch (UnsupportedEncodingException e) {

            throw new MessageConversionException(

                    "Failed to convert Message content", e);

        } 

        messageProperties.setContentType(MessageProperties.CONTENT_TYPE_JSON);

        messageProperties.setContentEncoding(this.defaultCharset);

        if (bytes != null) {

            messageProperties.setContentLength(bytes.length);

        }

        return new Message(bytes, messageProperties);

 

    }

}

3.生产者端调用

import java.util.List;

 

import org.springframework.amqp.core.AmqpTemplate;

 

 

public class MyMqGatway {

    

    @Autowired

    private AmqpTemplate amqpTemplate;

    

    public void sendDataToCrQueue(Object obj) {

        amqpTemplate.convertAndSend("queue_one_key", obj);

    }    

}

 

4.消费者端配置(与生产者端大同小异)

<?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:context="http://www.springframework.org/schema/context"

       xmlns:rabbit="http://www.springframework.org/schema/rabbit"

       xsi:schemaLocation="

            http://www.springframework.org/schema/beans

                http://www.springframework.org/schema/beans/spring-beans.xsd

            http://www.springframework.org/schema/context

                http://www.springframework.org/schema/context/spring-context.xsd

            http://www.springframework.org/schema/rabbit

                http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd">

 

    
 

   <!-- 连接服务配置  -->

   <rabbit:connection-factory id="connectionFactory" host="localhost" username="guest"

        password="guest" port="5672"  />

        
 

   <rabbit:admin connection-factory="connectionFactory"/>

   
 

   <!-- queue 队列声明-->

   <rabbit:queue id="queue_one" durable="true" auto-delete="false" exclusive="false" name="queue_one"/>

   
 

   
 

   <!-- exchange queue binging key 绑定 -->

    <rabbit:direct-exchange name="my-mq-exchange" durable="true" auto-delete="false" id="my-mq-exchange">

        <rabbit:bindings>

            <rabbit:binding queue="queue_one" key="queue_one_key"/>

        </rabbit:bindings>

    </rabbit:direct-exchange>

 

    
 

     
 

    <!-- queue litener  观察 监听模式 当有消息到达时会通知监听在对应的队列上的监听对象-->

    <rabbit:listener-container connection-factory="connectionFactory" acknowledge="auto" task-executor="taskExecutor">

        <rabbit:listener queues="queue_one" ref="queueOneLitener"/>

    </rabbit:listener-container>

</beans>

 

5.消费者端调用

import org.springframework.amqp.core.Message;

import org.springframework.amqp.core.MessageListener;

 

public class QueueOneLitener implements  MessageListener{

    @Override

    public void onMessage(Message message) {

        System.out.println(" data :" + message.getBody());

    }

}

 

Spring整合rabbitmq(转载)的更多相关文章

  1. RabbitMQ入门到进阶(Spring整合RabbitMQ&SpringBoot整合RabbitMQ)

    1.MQ简介 MQ 全称为 Message Queue,是在消息的传输过程中保存消息的容器.多用于分布式系统 之间进行通信. 2.为什么要用 MQ 1.流量消峰 没使用MQ 使用了MQ 2.应用解耦 ...

  2. spring整合RabbitMQ

    今天就来康康spring怎么整合RabbitMQ 注意一点,在发送消息的时候对template进行配置mandatory=true保证监听有效 生产端还可以配置其他属性,比如发送重试,超时时间.次数. ...

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

    1.RabbitMQ简介 RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是AMQP(高级消息队列协议)的标准实现.  官网:http://www.rabbitmq. ...

  4. rabbitMQ教程(三) spring整合rabbitMQ代码实例

    一.开启rabbitMQ服务,导入MQ jar包和gson jar包(MQ默认的是jackson,但是效率不如Gson,所以我们用gson) 二.发送端配置,在spring配置文件中配置 <?x ...

  5. rabbitMQ教程(四) spring整合rabbitMQ代码实例

    一.开启rabbitMQ服务,导入MQ jar包和gson jar包(MQ默认的是jackson,但是效率不如Gson,所以我们用gson) 二.发送端配置,在spring配置文件中配置 <?x ...

  6. 170613、Spring整合RabbitMQ实例

    一.rabbitMQ简介 1.1.rabbitMQ的优点(适用范围)1. 基于erlang语言开发具有高可用高并发的优点,适合集群服务器.2. 健壮.稳定.易用.跨平台.支持多种语言.文档齐全.3. ...

  7. spring 整合rabbitMQ

    <!-- 配置邮件消息队列监听 --> <bean id="maillistener" class="cn.xdf.wlyy.listener.Mail ...

  8. RabbitMQ的介绍与spring整合

    本文主要讲述的是个人参考官网及其他前辈博客,对RabbitMQ的一些理解与spring整个RabbitMQ. 一.RabbitMQ的介绍 1.1.什么是RabbitMQ RabbitMQ是一个由erl ...

  9. Mybatis与Spring整合,使用了maven管理项目,作为初学者觉得不错,转载下来

    转载自:http://www.cnblogs.com/xdp-gacl/p/4271627.html 一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: mvn archetype ...

随机推荐

  1. Edit Delete Mysql的主从复制

    参考博客 https://www.cnblogs.com/zhoujie/p/mysql1.html Mysql的主从复制至少是需要两个Mysql的服务,当然Mysql的服务是可以分布在不同的服务器上 ...

  2. springboot使用activemq同时接收queue和topic消息

    原文链接:https://blog.csdn.net/jia_costa/article/details/79354478 新建springboot项目, pom文件如下 <?xml versi ...

  3. Linux 时间以及时间间隔的简单处理.

    最近想知道自己的一个部署脚本的耗时, 中午时间看了一下最简单的Linux 时间函数的处理 我这里的处理非常简单, 仅仅是够用而已. 处理过程. 1. 获取当前时间: time1=`date` 或者是 ...

  4. 汉字在unicode中的位置

    在www.unicode.org中查找汉字.china找不到,后来查资料才明白,应该查CJK,为什么内? unicode这个组织吧中国日本韩国的字合并了   中日韩统一表意文字(CJK Unified ...

  5. oracle经典查询语句

    1. select * from emp;   2. select empno, ename, job from emp;   3. select empno 编号, ename 姓名, job 工作 ...

  6. MongoDB 正则表达式查询

    正则表达式查询     $regex 注:^ 取反的意思  用特殊的转义字符需要在前面加一个斜杠 通过 ^取反 ,再通过$not取反,就可获得只包含一种类型的数据 \\d  数字 \\s  空格 \\ ...

  7. SAS学习笔记31 SAS随机分组方法及实现

    随机分组方法包括: 简单随机化(simple randomization) 区组随机化(block randomization) 分层随机化(stratified randomization) 分层区 ...

  8. SAS学习笔记10 宏变量

    一个宏变量存放的值保持不变直到被修改(全局变量) 引用时,变量名前加上"&" 宏变量在引用时放在双引号之间会被解读(单引号不会被解读) 用户定义的宏变量,有三种方式: %l ...

  9. VS2019打开项目加载失败:无法找到 .NET Core SDK。请检查确保已安装此项且 global.json 中指定的版本(如有)与所安装的版本相匹配。

    问题描述: 用VS2019创建了asp.net core项目,正常运行:过几天后,再次打开,发现无法加载项目,报错无法找到.net core sdk.   分析过程: 首先怀疑环境变量的问题,重新设置 ...

  10. .NET Core 常用第三方包

    .NET Core 常用第三方包 作者:高堂 原文地址:https://www.cnblogs.com/gaotang/p/10845370.html 写在前面 最近在学习.NET Core 中经常用 ...