• Spring整合RabbitMQ


    需求:使用Spring整合RabbitMQ

    步骤:

    生产者

    1.创建生产者工程

    2.添加依赖

    3.配置整合

    4.编写代码发送消息

    消费者步骤相同

    生产者

    导入依赖

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0modelVersion>
    6. <groupId>comgroupId>
    7. <artifactId>spring-rabbitmq-producersartifactId>
    8. <version>1.0-SNAPSHOTversion>
    9. <dependencies>
    10. <dependency>
    11. <groupId>org.springframework.amqpgroupId>
    12. <artifactId>spring-rabbitartifactId>
    13. <version>2.1.8.RELEASEversion>
    14. dependency>
    15. <dependency>
    16. <groupId>junitgroupId>
    17. <artifactId>junitartifactId>
    18. <version>4.12version>
    19. dependency>
    20. <dependency>
    21. <groupId>org.springframeworkgroupId>
    22. <artifactId>spring-testartifactId>
    23. <version>5.1.7.RELEASEversion>
    24. dependency>
    25. dependencies>
    26. <build>
    27. <plugins>
    28. <plugin>
    29. <groupId>org.apache.maven.pluginsgroupId>
    30. <artifactId>maven-compiler-pluginartifactId>
    31. <version>3.8.0version>
    32. <configuration>
    33. <source>1.8source>
    34. <target>1.8target>
    35. configuration>
    36. plugin>
    37. plugins>
    38. build>
    39. <properties>
    40. <maven.compiler.source>8maven.compiler.source>
    41. <maven.compiler.target>8maven.compiler.target>
    42. <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    43. properties>
    44. project>

    配置文件

    1. rabbitmq.host=192.168.235.129
    2. rabbitmq.port=5672
    3. rabbitmq.username=ljb
    4. rabbitmq.password=ljb
    5. rabbitmq.virtual-host=/ljb
    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:context="http://www.springframework.org/schema/context"
    5. xmlns:rabbit="http://www.springframework.org/schema/rabbit"
    6. xsi:schemaLocation="http://www.springframework.org/schema/beans
    7. http://www.springframework.org/schema/beans/spring-beans.xsd
    8. http://www.springframework.org/schema/context
    9. https://www.springframework.org/schema/context/spring-context.xsd
    10. http://www.springframework.org/schema/rabbit
    11. http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">
    12. <context:property-placeholder location="classpath:rabbitmq.properties"/>
    13. <rabbit:connection-factory id="connectionFactory" host="${rabbitmq.host}"
    14. port="${rabbitmq.port}"
    15. username="${rabbitmq.username}"
    16. password="${rabbitmq.password}"
    17. virtual-host="${rabbitmq.virtual-host}"/>
    18. <rabbit:admin connection-factory="connectionFactory"/>
    19. <rabbit:queue id="spring_queue" name="spring_queue" auto-declare="true"/>
    20. <rabbit:queue id="spring_fanout_queue_1" name="spring_fanout_queue_1" auto-declare="true"/>
    21. <rabbit:queue id="spring_fanout_queue_2" name="spring_fanout_queue_2" auto-declare="true"/>
    22. <rabbit:fanout-exchange id="spring_fanout_exchange" name="spring_fanout_exchange" auto-declare="true">
    23. <rabbit:bindings>
    24. <rabbit:binding queue="spring_fanout_queue_1"/>
    25. <rabbit:binding queue="spring_fanout_queue_2"/>
    26. rabbit:bindings>
    27. rabbit:fanout-exchange>
    28. <rabbit:queue id="spring_topic_queue_star" name="spring_topic_queue_star" auto-declare="true"/>
    29. <rabbit:queue id="spring_topic_queue_well" name="spring_topic_queue_well" auto-declare="true"/>
    30. <rabbit:queue id="spring_topic_queue_well2" name="spring_topic_queue_well2" auto-declare="true"/>
    31. <rabbit:topic-exchange id="spring_topic_exchange" name="spring_topic_exchange" auto-declare="true">
    32. <rabbit:bindings>
    33. <rabbit:binding pattern="ljb.*" queue="spring_topic_queue_star"/>
    34. <rabbit:binding pattern="ljb.#" queue="spring_topic_queue_well"/>
    35. <rabbit:binding pattern="lu.#" queue="spring_topic_queue_well2"/>
    36. rabbit:bindings>
    37. rabbit:topic-exchange>
    38. <rabbit:template id="rabbitTemplate" connection-factory="connectionFactory"/>
    39. beans>

    生产者代码

    1. package com;
    2. import org.junit.Test;
    3. import org.junit.runner.RunWith;
    4. import org.springframework.amqp.rabbit.core.RabbitTemplate;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.test.context.ContextConfiguration;
    7. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    8. @RunWith(SpringJUnit4ClassRunner.class)
    9. @ContextConfiguration(locations = "classpath:spring-rabbitmq-producer.xml")
    10. public class ProducerTest {
    11. //1.注入 RabbitTempLate
    12. @Autowired
    13. private RabbitTemplate rabbitTemplate;
    14. @Test
    15. public void testHelloWord(){
    16. //2.发送消息
    17. //参数说明——1:队列名称(因为没有指定Routing Key,但是要发送到队列,所以可以直接指定队列名替代Routing Key)
    18. // 2:自定义队列消息
    19. rabbitTemplate.convertAndSend("spring_queue","hello world spring----");
    20. }
    21. @Test
    22. public void testFanout(){
    23. //参数说明——1:交换机 2:Routing Key 3:自定义队列消息
    24. rabbitTemplate.convertAndSend("spring_fanout_exchange","ljb.haha","spring fanout....");
    25. }
    26. }

    消费者 

    导入依赖于生产者相同

    配置文件

    properties与生产者相同

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:context="http://www.springframework.org/schema/context"
    5. xmlns:rabbit="http://www.springframework.org/schema/rabbit"
    6. xsi:schemaLocation="http://www.springframework.org/schema/beans
    7. http://www.springframework.org/schema/beans/spring-beans.xsd
    8. http://www.springframework.org/schema/context
    9. https://www.springframework.org/schema/context/spring-context.xsd
    10. http://www.springframework.org/schema/rabbit
    11. http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">
    12. <context:property-placeholder location="classpath:rabbitmq.properties"/>
    13. <rabbit:connection-factory id="connectionFactory" host="${rabbitmq.host}"
    14. port="${rabbitmq.port}"
    15. username="${rabbitmq.username}"
    16. password="${rabbitmq.password}"
    17. virtual-host="${rabbitmq.virtual-host}"/>
    18. <bean id="springQueueListener" class="com.listener.SpringQueueListener"/>
    19. <rabbit:listener-container connection-factory="connectionFactory" auto-declare="true">
    20. <rabbit:listener ref="springQueueListener" queue-names="spring_queue"/>
    21. rabbit:listener-container>
    22. beans>

    消费者代码

    监听器

    1. package com.listener;
    2. import org.springframework.amqp.core.Message;
    3. import org.springframework.amqp.core.MessageListener;
    4. public class SpringQueueListener implements MessageListener {
    5. @Override
    6. public void onMessage(Message message) {
    7. //监听到之后直接打印
    8. System.out.println(new String(message.getBody()));
    9. }
    10. }
    1. package com;
    2. import org.junit.Test;
    3. import org.junit.runner.RunWith;
    4. import org.springframework.test.context.ContextConfiguration;
    5. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    6. @ContextConfiguration(locations = "classpath:spring-rabbitmq-consumer.xml")
    7. @RunWith(SpringJUnit4ClassRunner.class)
    8. public class ConsumerTest {
    9. @Test
    10. public void Test1() {
    11. //使消费者一致在监听队列
    12. while (true) {
    13. }
    14. }
    15. }
    16. //效果是监听器一直处于监听队列消息的状态,只要队列区有消息就获取

  • 相关阅读:
    SQL教程之性能不仅仅是查询
    快速排序
    Python 字典已经是有序的,你知道吗?
    华为某员工爆料:偷偷跑出去面试,被面试官鄙视了。第一句话就问:华为淘汰的吧,35岁了,这个年龄在华为能混得下去吗?身体没啥毛病吧
    tomcat为什么要自定义类加载器?
    【python】导出mysql数据,输出excel!
    java - 寻找一个值的二分查找、寻找左/侧边界的二分查找总结
    手记:把代码上传到Gitee等远程仓库的过程记录及常见问题
    球钟问题既栈和队列的结合实例
    ARP协议介绍与ARP协议的攻击手法
  • 原文地址:https://blog.csdn.net/weixin_61611746/article/details/136290044