原文地址: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. Go之接口interface(1)

    1. 什么是interface在此之前,我们遇到的都是具体的类型,比如数字类型.切片类型等等.对于这些具体的类型,我们总是能知道它是什么.可以利用它来做什么,比如对于一个数字类型,我们知道可以对其进行 ...

  2. element-ui中的表格嵌套表格

    element-ui中有详细的各种表格及表格方法.也有表格展开出现二级的样式,但是却没有表格嵌套二级表格的方案,于是就自己写了一个,样式图如下: 展开后如下 这就是一个普通的二级表格嵌套,用的是el- ...

  3. STL源码剖析-学习笔记

    1.模板是一个公式或是蓝图,本身不是类或是函数,需进行实例化的过程.这个过程是在编译期完成的,编译器根据传递的实参,推断出形参的类型,从而实例化相应的函数 2. 后续补充-.

  4. Airflow怎么删除系统自带的DAG任务

    点击这个按钮 找到dag文件所在路径,并进入路径将其文件删除即可

  5. [转帖]Oracle数据安全--校验Oracle安装软件的 SHA码 防范注入风险

    Oracle数据安全--校验Oracle安装软件的 SHA码 防范注入风险 https://www.toutiao.com/i6723512458482303499/ certutil md5sums ...

  6. 模块 time 和 datetime

    目录 时间模块time datatime time 模块 datetime 模块 时间模块time datatime time 模块 在Python中,通常有这三种方式来表示时间:时间戳.元组(str ...

  7. Vue路由系统

    Vue路由系统 一切分离都是为了更好的结合,本文详细介绍了前后端分离架构之后,前端如何实现路由控制,即Vue路由系统. 一.VueRouter实现原理 VueRouter的实现原理是根据监控锚点值的改 ...

  8. C++中的swap(交换函数)

    交换两个变量的值很简单. 比如 int a = 1; b = 2; 交换a b的值 这个很简单 很容易想到的是找个中间变量比如  int temp  = a; a = b; b = temp; 不需要 ...

  9. Python3 和 Python2的区别

    目录 print Python2.7的print不是一个function Python3里的print是一个function. Unicode Python 2 有 ASCII str() 类型,un ...

  10. uboot-的start.S详细注解及分析

    原文地址:uboot-的start.S详细注解及分析 作者:zhouyg11 大多数bootloader都分为stage1和stage2两部分,u-boot也不例外.依赖于CPU体系结构的代码(如设备 ...