SpringMVC集成RabbitMQ

        RabbitMQ在集成到SpringMVC的过程中,可能会遇到很多坑,网上很多配置都有问题,要么无法发消息,要么无法接收消息,LZ特将能够使用的配置发出来,分享给大家。

        首先添加Maven依赖:

 
  1. <dependency>

  2. <groupId>org.springframework.amqp</groupId>

  3. <artifactId>spring-rabbit</artifactId>

  4. <version>1.3.6.RELEASE</version>

  5. </dependency>

  6. <dependency>

  7. <groupId>com.rabbitmq</groupId>

  8. <artifactId>amqp-client</artifactId>

  9. <version>3.5.1</version>

  10. </dependency>

创建配置文件,application-mq.xml

 

添加代码:

 

 
  1. <beans xmlns="http://www.springframework.org/schema/beans"

  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

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

  4. xsi:schemaLocation="http://www.springframework.org/schema/beans

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

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

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

  8.  
  9. <description>rabbitmq 连接服务配置</description>

  10. <!-- 连接配置 -->

  11.  
  12. <bean id="connectionFactory" class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">

  13. <property name="username" value="lynn"></property>

  14. <property name="password" value="lynn"></property>

  15. <property name="virtualHost" value="/"></property>

  16. <property name="addresses" value="192.168.1.38:5672"></property>

  17. <property name="publisherConfirms" value="true"></property>

  18. </bean>

  19. <!-- spring template声明-->

  20. <bean id="rabbitTemplate" class="org.springframework.amqp.rabbit.core.RabbitTemplate">

  21. <constructor-arg name="connectionFactory" ref="connectionFactory"/>

  22. <!--消息确认回调 -->

  23. <property name="confirmCallback" ref="producer"/>

  24. </bean>

  25.  
  26. <bean id="queue" class="org.springframework.amqp.core.Queue">

  27. <constructor-arg name="name" value="spring-boot-queue"></constructor-arg>

  28. <constructor-arg name="durable" value="true"></constructor-arg>

  29. </bean>

  30.  
  31. <bean id="exchange" class="org.springframework.amqp.core.DirectExchange">

  32. <constructor-arg name="name" value="spring-boot-exchange"></constructor-arg>

  33. </bean>

  34. <bean id="binding" class="cn.sunsharp.bigdata.mq.MyBinding" init-method="createBinding">

  35. <constructor-arg index="0" ref="queue"></constructor-arg>

  36. <constructor-arg index="1" ref="exchange"></constructor-arg>

  37. <constructor-arg index="2" value="spring-boot-routingKey"></constructor-arg>

  38. </bean>

  39.  
  40. <bean name="queueListenter" class="cn.sunsharp.bigdata.mq.QueueListenter"></bean>

  41. <bean name="producer" class="cn.sunsharp.bigdata.mq.RmqProducer"></bean>

  42.  
  43. <bean id="messageContainer" class="org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer">

  44. <property name="queues" ref="queue"></property>

  45. <property name="exposeListenerChannel" value="true"></property>

  46. <property name="maxConcurrentConsumers" value="10"></property>

  47. <property name="concurrentConsumers" value="2"></property>

  48. <property name="connectionFactory" ref="connectionFactory"></property>

  49. <property name="acknowledgeMode" value="MANUAL"></property>

  50. <property name="messageListener" ref="queueListenter"></property>

  51. </bean>

  52.  
  53.  
  54. </beans>



添加Java代码:

 

生产者:

 

 
  1. package cn.sunsharp.bigdata.mq;

  2.  
  3. import java.util.UUID;

  4.  
  5. import org.springframework.amqp.rabbit.connection.ConnectionFactory;

  6. import org.springframework.amqp.rabbit.core.RabbitTemplate;

  7. import org.springframework.amqp.rabbit.core.RabbitTemplate.ConfirmCallback;

  8. import org.springframework.amqp.rabbit.support.CorrelationData;

  9. import org.springframework.beans.factory.annotation.Autowired;

  10.  
  11. public class RmqProducer implements ConfirmCallback{

  12.  
  13. private RabbitTemplate template;

  14.  
  15. @Autowired

  16. public RmqProducer(RabbitTemplate template){

  17. this.template = template;

  18. }

  19.  
  20. /* (non-Javadoc)

  21. * @see com.stnts.tita.rm.api.mq.MQProducer#sendDataToQueue(java.lang.String, java.lang.Object)

  22. */

  23. public void sendMessage(String content) {

  24. try {

  25. CorrelationData correlationId = new CorrelationData(UUID.randomUUID().toString());

  26. template.convertAndSend("spring-boot-exchange", "spring-boot-routingKey",content,correlationId);

  27. } catch (Exception e) {

  28. e.printStackTrace();

  29. }

  30. }

  31.  
  32. @Override

  33. public void confirm(CorrelationData correlationData, boolean ack) {

  34. System.out.println(" 回调id:" + correlationData+"ack:"+ack);

  35. }

  36. }

 

消费者:

 
  1. package cn.sunsharp.bigdata.mq;

  2.  
  3. import org.springframework.amqp.core.Message;

  4. import org.springframework.amqp.rabbit.core.ChannelAwareMessageListener;

  5.  
  6. import com.rabbitmq.client.Channel;

  7.  
  8. public class QueueListenter implements ChannelAwareMessageListener{

  9.  
  10. @Override

  11. public void onMessage(Message message, Channel channel) throws Exception {

  12. byte[] body = message.getBody();

  13. System.out.println("receive msg : " + new String(body));

  14. channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); //确认消息成功消费

  15. }

  16.  
  17. }

//必须要添加如下这个类,否者无法接收消息。

 
  1. package cn.sunsharp.bigdata.mq;

  2.  
  3. import org.springframework.amqp.core.Binding;

  4. import org.springframework.amqp.core.BindingBuilder;

  5. import org.springframework.amqp.core.DirectExchange;

  6. import org.springframework.amqp.core.Queue;

  7.  
  8. public class MyBinding {

  9.  
  10. private Queue queue;

  11. private DirectExchange exchange;

  12. private String routingkey;

  13.  
  14. private MyBinding(Queue queue,DirectExchange exchange,String routingkey){

  15. this.queue = queue;

  16. this.exchange = exchange;

  17. this.routingkey = routingkey;

  18. }

  19.  
  20. public Binding createBinding(){

  21. return BindingBuilder.bind(queue).to(exchange).with(routingkey);

  22. }

  23. }

 

下面测试代码:

 

 
  1. @Resource(name="producer")

  2. private RmqProducer producer;

  3. public voidtest(){

  4. try {

  5. //发送消息

  6. producer.sendMessage("test");

  7. } catch (Exception e) {

  8. e.printStackTrace();

  9. }

  10. }


控制台即可打印接收到的消息。 

 

原文地址:https://blog.csdn.net/lynnlovemin/article/details/71750705

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值