原文地址: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. Spring 多对对实体

    package com.wangshenghua.entity; import java.io.Serializable; import java.util.Set; import javax.per ...

  2. MySQL5.7.9安装与配置优化

    一. 环境准备 1. 下载软件包 wget http://test.hexin.cn/software/mysql-5.7.9.tar.gz -P /usr/local/src/ wget http: ...

  3. vba Excel连接数据库

    PostgreSql: 第一步 在网上下载postres的驱动程序,之后安装,下载地址:https://www.devart.com/odbc/postgresql/download.html 第二步 ...

  4. [转帖]拿小本本记下的Linux Shell常用技巧(一)

    拿小本本记下的Linux Shell常用技巧(一) https://zhuanlan.zhihu.com/p/73361101 一. 特殊文件: /dev/null和/dev/tty Linux系统提 ...

  5. hadoop基本文件配置

    [学习笔记] 5)hadoop基本文件配置:hadoop配置文件位于:/etc/hadoop下(etc即:“etcetera”(附加物))core-site.xml:<configuration ...

  6. 《Mysql - 字符串索引应该如何建立?》

    一:概述 - 我有一个需求是需要邮箱登录的, - mysql> select f1, f2 from SUser where email='xxx'; - 我们知道,如果不在 email 上建立 ...

  7. 3种PHP实现数据采集的方法

    https://www.php.cn/php-weizijiaocheng-387992.html

  8. 解决IIS出现“由于权限不足而无法读取配置文件”的问题

    在部署IIS项目的时候,今天突然遇到了如下问题: HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效 详细错误信息: 由于权限 ...

  9. 【转】Visual Studio Code必备插件

    先ctrl+shift+p,弹出命令面板-选中Extensions:Install Extensions 或者直接点击左侧栏这个扩展按钮(Ctrl+Shift+X) 然后左侧栏就会显示出很多插件,如图 ...

  10. sql注入测试(2)---实例测试

    以下篇幅,用一个简单的实例说明如何进行测试. 功能:根据用户NAME删除用户,采用的是SQL拼接的方式,核心代码部分如下: public static void deleteByName(String ...