spring配置rabbitMQ(Spring AMQP)

本人rabbitMQ版本是3.6.5,此处省略rabbitMQ的安装方式。

windows的安装方式(十分详细):http://blog.csdn.net/chwshuang/article/details/50543878

linux的安装方式(本人整理的):http://blog.csdn.net/fuck487/article/details/77869039

rabbitMQ命令操作:http://www.cnblogs.com/ericli-ericli/p/5902270.html

一、maven依赖

<!-- rabbitmq start -->
		<dependency>
        	<groupId>com.rabbitmq</groupId>
        	<artifactId>amqp-client</artifactId>
        	<version>4.2.0</version>
    	</dependency>
    	<dependency>
        	<groupId>org.springframework.amqp</groupId>
        	<artifactId>spring-rabbit</artifactId>
        	<version>1.7.3.RELEASE</version>
    	</dependency>
    	<!-- rabbitmq end -->


二、mq的spring配置

<?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/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/rabbit
    http://www.springframework.org/schema/rabbit/spring-rabbit.xsd" >

    <description>rabbitmq 连接服务配置</description>
    <!-- 连接配置 -->
    <rabbit:connection-factory id="mqConnectionFactory" host="${mq.host}" username="${mq.username}" password="${mq.password}" port="${mq.port}"  virtual-host="${mq.vhost}"/>

	<!--通过指定下面的admin信息,当前producer中的exchange和queue会在rabbitmq服务器上自动生成-->
    <rabbit:admin connection-factory="mqConnectionFactory"/>
	
	<!-- 声明消息队列 -->
    <!-- durable:是否持久化,宕机恢复后会重持久化日志恢复消息队列 -->
	<!-- exclusive: 仅创建者可以使用的私有队列,断开后自动删除 -->
	<!-- auto_delete: 当所有消费客户端连接断开后,是否自动删除队列 -->
	<!-- 若已经声明消息队列,并且设置跟以下设置不一致,会报错,必须先去管理中心删除该消息队列,再重新创建消息队列 -->
    <rabbit:queue id="myQueue" name="myQueue" durable="true" auto-delete="false" exclusive="false" />
    
    <!-- 定义交换机 -->
    <rabbit:direct-exchange id="myExchange" name="myExchange" durable="true" auto-delete="false" >
	    <!-- 可以绑定多个消息队列 -->
	    <rabbit:bindings>
	        <rabbit:binding queue="myQueue" key="myQueueKey"/>
	    </rabbit:bindings>
	</rabbit:direct-exchange>
	
	<!-- 消息对象json转换类 -->
    <bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" />
	
    <!-- spring template声明-->
    <rabbit:template id="amqpTemplate" exchange="myExchange"  connection-factory="mqConnectionFactory"  message-converter="jsonMessageConverter"/>
	
	<!-- 定义监听器 -->
	<rabbit:listener-container connection-factory="mqConnectionFactory" acknowledge="auto">
    	<rabbit:listener queues="myQueue" ref="queueListenter"/>
	</rabbit:listener-container>
	
	<!-- 定义监听队列的处理类 -->
	<bean id="queueListenter" class="com.bluedon.useradmin.datainteraction.mq.QueueListener" />
</beans>


如果是集群连接,rabbit:connection-factory要改成如下,主要是addresses属性,格式为ip1:port,ip2:port

<rabbit:connection-factory id="mqConnectionFactory" addresses="${mq.addresses}" username="${mq.username}" password="${mq.password}" virtual-host="${mq.vhost}" />

另外如果报错提示"addresses"不存在,则就是xsd文件问题,应该用最新的xsd

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




rabbitMQ的连接配置

#rabbitmq-config
mq.host=127.0.0.1
mq.username=guest
mq.password=guest
mq.port=5672
mq.vhost=/

集群的连接配置

mq.host=127.0.0.1
mq.username=admin
mq.password=123456
mq.port=5672
mq.addresses=192.168.153.129:5672,192.168.153.130:5672
mq.vhost=/



注:rabbitMQ连接时,我定义了新的管理员用户和虚拟主机。但是程序运行移植报错没权限。用默认的用户名密码和虚拟主机才行。暂时也没找到原因



三、定义消息队列监听类

public class QueueListener implements MessageListener {
	@Override
    public void onMessage(Message msg) {
        try{
            System.out.println(new String(msg.getBody()));
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
实现rabbitMQ的消息监听器,重写onMessage方法

四、定义消息发送类

@Service
public class MessageBuilder {
	
	@Resource
	private AmqpTemplate amqpTemplate;
	
	public void sendDataToQueue(String queueKey, Object object){
		amqpTemplate.convertAndSend(queueKey,object);
	}
}
MessageBuilder实例化时也要通过spring来实例化,不然amqpTemplate是没办法spring注入的。或者amqpTemplate直接通过查找bean的方式初始化,如下

@Service
public class MessageBuilder {
	
	/*@Resource(name="amqpTemplate")
	private AmqpTemplate amqpTemplate;*/
	
	public void sendDataToQueue(String queueKey, Object object){
		WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
		AmqpTemplate amqpTemplate = (AmqpTemplate) context.getBean("amqpTemplate");
		amqpTemplate.convertAndSend(queueKey,object);
	}
}


五、通过control调用MessageBuilder发送消息

@Controller
@RequestMapping("/test")
public class TestController {
	
	@Resource
	private TestService testService;
	
	@Resource
	private MessageBuilder builder;
	
	@RequestMapping(value = "test", method = RequestMethod.GET)
	@ResponseBody
	public Object insert(String userName,String pwd,String mobileMachineCode) throws Exception{

		//testService.addUser();
		builder.sendDataToQueue("myQueueKey", "dadfadf");
		return "ddddd";
	}
}
指定rabbit交换机的消息队列的key为“myQueueKey”




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值