原文地址: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. 乐字节Java学习01-Java语言概述,Java发展前景,Java的特点

    从这篇文章开始,小乐准备写一整系列的Java学习文章,一步一步带您进入Java的神奇世界! 这是第一篇:Java语言概述以及Java的发展前景 1.SUN公司介绍 SUN公司全称是Stanford U ...

  2. [windows官网]虚拟地址空间

    虚拟地址空间 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/gettingstarted/virtual-address-spac ...

  3. day0~day13

    day0 day1 day2 day4 day5 day7 day9 day10 day12 day13

  4. Redis慢日志取出来

    http://blog.chinaunix.net/uid-31396856-id-5758295.htmlhttps://blog.51cto.com/legehappy/2151986?sourc ...

  5. 通过命令行新建qt项目,并编译打包

    ref: https://blog.csdn.net/weixin_42837024/article/details/81945656 平台 :Ubuntu 18.04 QT版本   :5.9.1 ( ...

  6. win7+cuda+anaconda python+tensorflow-gpu+keras安装成功版本匹配汇总

    win7+cuda+anaconda python+tensorflow-gpu+keras安装成功版本匹配汇总 2019-09-20 15:06:03 wyx100 阅读数 38更多 分类专栏: M ...

  7. poj 1837 天平问题(01背包变种)

    题意:给你n个挂钩,m个砝码,要求砝码都用上,问有多少中方案数 题解:对于这道题目的状态,我们定义一个变量j为平衡度,当j=0的时候,表明天平平衡.定义dp[i][j]表达的含义为使用前n个砝码的时候 ...

  8. hdu 1698 线段数的区间更新 以及延迟更新

    先说说区间更新和单点更新的区别 主要的区别是搜索的过程 前者需要确定一个区间 后者就是一个点就好了 贴上两者代码 void updata(int i)//单点更新 { int l=stu[i].l; ...

  9. Docker多阶段构建实战(multi-stage builds)

    在编写Dockerfile构建docker镜像时,常遇到以下问题: RUN命令会让镜像新增layer,导致镜像变大,虽然通过&&连接多个命令能缓解此问题,但如果命令之间用到docker ...

  10. springboot mvc自动配置(二)注册DispatcherServlet到ServletContext

    所有文章 https://www.cnblogs.com/lay2017/p/11775787.html 正文 上一篇文章中,我们看到了DispatcherServlet和DispatcherServ ...