`

Spring整合RabbitMQ

 
阅读更多

需要依赖的jar包

 

/* RabbitMQ of Gradle */
compile("com.rabbitmq:amqp-client:5.1.2")
compile("org.springframework.amqp:spring-rabbit:2.0.1.RELEASE")

/* RabbitMQ of Maven*/
<dependency>
  <groupId>com.rabbitmq</groupId>
  <artifactId>amqp-client</artifactId>
  <version>5.1.2</version>
</dependency>
<dependency>
  <groupId>org.springframework.amqp</groupId>
  <artifactId>spring-rabbit</artifactId>
  <version>2.0.1.RELEASE</version>
</dependency>

 

 

direct交换器

 

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

    <description>Spring RabbitMQ 整合配置</description>
    <!--
        virtual-host:虚拟主机,用于权限管理,默认为 /
    -->
    <rabbit:connection-factory id="connectionFactory"
                               host="192.168.41.128"
                               port="5672"
                               username="admin"
                               password="admin"
                               virtual-host="/"/>

    <!--通过指定下面的admin信息,当前producer中的exchange和queue会在rabbitmq服务器上自动生成-->
    <rabbit:admin connection-factory="connectionFactory"/>

    <!-- 咨询订单创建成功 -->
    <rabbit:queue id="q_consult_create_id" name="q_consult_create_name" durable="true" auto-delete="false" exclusive="false"/>
    <!-- 咨询订单支付成功 -->
    <rabbit:queue id="q_order_pay_id" name="q_order_pay_name" durable="true" auto-delete="false" exclusive="false"/>

    <!-- direct exchange -->
    <rabbit:direct-exchange name="myDirectExchangeName" id="myDirectExchangeId">
        <rabbit:bindings>
            <rabbit:binding queue="q_consult_create_id" key="q_consult_create_routeKey"/>
            <rabbit:binding queue="q_order_pay_id" key="q_order_pay_routeKey"/>
        </rabbit:bindings>
    </rabbit:direct-exchange>

    <!-- spring amqpTemplate声明,此处exchange不能使用id指定 -->
    <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" exchange="myDirectExchangeName"/>

    <!-- 消费者 -->
    <bean id="consumerListener" class="cn.gov.wu.rabbit.ConsumerListener"/>
    <rabbit:listener-container connection-factory="connectionFactory">
        <!-- 使用queues或者queue-names都可以 -->
        <rabbit:listener ref="consumerListener" method="receiveMsg" queues="q_consult_create_id,q_order_pay_id"/>
        <!--<rabbit:listener ref="consumerListener" method="receiveMsg" queue-names="q_consult_create_name,q_order_pay_name"/>-->
    </rabbit:listener-container>

</beans>

 

 

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/rabbitmq-config-direct.xml");
    AmqpTemplate amqpTemplate = context.getBean("amqpTemplate", AmqpTemplate.class);

    String routingKey = "q_consult_create_routeKey";
    amqpTemplate.convertAndSend(routingKey, "给队列 q_consult_create 发送消息");

    routingKey = "q_order_pay_routeKey";
    amqpTemplate.convertAndSend(routingKey, "给队列 q_order_pay 发送消息");
    context.close();

 

 

  

topic交换器

特别注意:发往topic转发器的消息不能随意的设置选择键(routing_key),必须是由点隔开的一系列的标识符组成。

 

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

    <description>Spring RabbitMQ 整合配置</description>
    <!--
        virtual-host:虚拟主机,用于权限管理,默认为 /
    -->
    <rabbit:connection-factory id="connectionFactory"
                               host="192.168.41.128"
                               port="5672"
                               username="admin"
                               password="admin"
                               virtual-host="/"/>

    <!--通过指定下面的admin信息,当前producer中的exchange和queue会在rabbitmq服务器上自动生成-->
    <rabbit:admin connection-factory="connectionFactory"/>

    <!-- 咨询订单创建成功 -->
    <rabbit:queue id="q_topic_consult_create_id" name="q_topic_consult_create_name" durable="false" auto-delete="false" exclusive="false"/>
    <!-- 咨询订单支付成功 -->
    <rabbit:queue id="q_topic_order_pay_id" name="q_topic_order_pay_name" durable="false" auto-delete="false" exclusive="false"/>

    <!-- topic exchange -->
    <rabbit:topic-exchange name="myTopicExchangeName" id="myTopicExchangeId" durable="false">
        <rabbit:bindings>
            <rabbit:binding pattern="#.create.*.routeKey" queue="q_topic_consult_create_id"/>
            <rabbit:binding pattern="q.*.*.routeKey" queue="q_topic_order_pay_id"/>
        </rabbit:bindings>
    </rabbit:topic-exchange>

    <!-- spring amqpTemplate声明,此处exchange不能使用id指定 -->
    <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" exchange="myTopicExchangeName"/>

    <!-- 消费者 -->
    <bean id="consumerListener" class="cn.gov.wu.rabbit.ConsumerListener"/>
    <rabbit:listener-container connection-factory="connectionFactory">
        <!-- 使用queues或者queue-names都可以 -->
        <rabbit:listener ref="consumerListener" method="receiveMsg" queues="q_topic_consult_create_id,q_topic_order_pay_id"/>
    </rabbit:listener-container>

</beans>
// 发往topic转发器的消息不能随意的设置选择键(routing_key),必须是由点隔开的一系列的标识符组成
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/rabbitmq-config-topic.xml");
AmqpTemplate amqpTemplate = context.getBean("amqpTemplate", AmqpTemplate.class);

String exchangeName = "myTopicExchangeName";

String routingKey1 = "a.create.consult.routeKey";
String routingKey2 = "q.create.consult.routeKey";
amqpTemplate.convertAndSend(exchangeName, routingKey1, "给exchange myTopicExchangeName 发送消息, routeKey为 a.create.consult.routeKey");
amqpTemplate.convertAndSend(exchangeName, routingKey2, "给exchange myTopicExchangeName 发送消息, routeKey为 b.create.consult.routeKey");

String routingKey3 = "q.order.pay.routeKey";
amqpTemplate.convertAndSend(exchangeName, routingKey3, "给exchange myTopicExchangeName 发送消息, routeKey为 q.order.pay.routeKe");
context.close();

  

 

fanout交换器

 

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

    <description>Spring RabbitMQ 整合配置</description>
    <!--
        virtual-host:虚拟主机,用于权限管理,默认为 /
    -->
    <rabbit:connection-factory id="connectionFactory"
                               host="192.168.41.128"
                               port="5672"
                               username="admin"
                               password="admin"
                               virtual-host="/"/>

    <!--通过指定下面的admin信息,当前producer中的exchange和queue会在rabbitmq服务器上自动生成-->
    <rabbit:admin connection-factory="connectionFactory"/>

    <!-- 咨询订单创建成功 -->
    <rabbit:queue id="q_fanout_consult_create_id" name="q_topic_consult_create_name" durable="false" auto-delete="false" exclusive="false"/>
    <!-- 咨询订单支付成功 -->
    <rabbit:queue id="q_fanout_order_pay_id" name="q_topic_order_pay_name" durable="false" auto-delete="false" exclusive="false"/>

    <!-- fanout exchange -->
    <rabbit:fanout-exchange name="myFanoutExchangeName" id="myFanoutExchangeId">
        <rabbit:bindings>
            <rabbit:binding queue="q_fanout_consult_create_id"/>
            <rabbit:binding queue="q_fanout_order_pay_id"/>
        </rabbit:bindings>
    </rabbit:fanout-exchange>

    <!-- spring amqpTemplate声明,此处exchange不能使用id指定 -->
    <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" exchange="myFanoutExchangeName"/>

    <!-- 消费者 -->
    <bean id="consumerListener" class="cn.gov.wu.rabbit.ConsumerListener"/>
    <rabbit:listener-container connection-factory="connectionFactory">
        <!-- 使用queues或者queue-names都可以 -->
        <rabbit:listener ref="consumerListener" method="receiveMsg" queues="q_fanout_consult_create_id,q_fanout_order_pay_id"/>
    </rabbit:listener-container>

</beans>

 

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/rabbitmq-config-fanout.xml");
AmqpTemplate amqpTemplate = context.getBean("amqpTemplate", AmqpTemplate.class);
amqpTemplate.convertAndSend("发送fanout消息");
context.close();

 

 

 

0
0
分享到:
评论

相关推荐

    spring整合rabbitmq的实例

    本文将详细介绍如何整合Spring与RabbitMQ,以实现高效的消息传递。 首先,我们要理解Spring对RabbitMQ的支持主要体现在Spring AMQP项目中,它为RabbitMQ提供了一套高级抽象层,使得开发者能够更加便捷地使用...

    spring整合rabbitmq需要的jar包(spring版本4.2.0)

    在"spring整合rabbitmq需要的jar包(spring版本4.2.0)"中,提到了几个核心的库文件,它们分别是: 1. **spring-rabbit-1.5.1.RELEASE.jar**:这是Spring对RabbitMQ的官方支持模块,它提供了与RabbitMQ集成的API和...

    spring集成rabbitmq 通俗易懂的demo

    首先,让我们理解Spring集成RabbitMQ的基本步骤: 1. **添加依赖**:在你的`pom.xml`或`build.gradle`文件中,你需要添加Spring AMQP和RabbitMQ客户端库的依赖。对于Maven用户,可以添加如下依赖: ```xml ...

    spring集成rabbitmq实现rpc

    本文将详细讲解如何在Spring项目中集成RabbitMQ,实现基于RPC(远程过程调用)的通信模式。 首先,我们需要在项目中引入Spring AMQP库,这是Spring对RabbitMQ的官方支持。可以通过在pom.xml文件中添加以下Maven依赖...

    RabbitMq与Spring整合实例

    本实例主要介绍如何在Spring应用中集成RabbitMQ,构建一个完整的消息传递系统。首先,你需要确保已经安装了RabbitMQ服务器,并且能够正常运行。RabbitMQ通常通过AMQP(Advanced Message Queuing Protocol)协议进行...

    RabbitMQ入门到进阶(Spring整合RabbitMQ&amp;SpringBoot整合RabbitMQ).doc

    RabbitMQ入门到进阶(Spring整合RabbitMQ&amp;SpringBoot整合RabbitMQ).doc

    rabbitmq spring demo

    rabbitmq spring rabbitmq spring rabbitmq spring rabbitmq spring http://knight-black-bob.iteye.com/blog/2304089

    Spring整合RabbitMQ完整项目源码.rar

    此源码是在前人Demo的基础上自己改造的,主要讲了spring和rabbitMQ的整合与使用。其中包含两个项目,一个Producer,一个Consumer,能够分别运行。Producer生产并发送消息到RabbitMQ,Consumer从RabbitMQ接收并处理...

    spring集成rabbitmq最初始的SSM项目信息

    **SSM集成RabbitMQ最初始的项目信息详解** 在Java Web开发中,Spring、Struts和MyBatis(简称SSM)是一个常见的框架组合,它们分别负责控制层、表现层和数据持久化层。而RabbitMQ则是一个强大的消息中间件,常用于...

    介绍Spring Cloud Stream与RabbitMQ集成

    介绍Spring Cloud Stream与RabbitMQ集成的代码示例。Spring Cloud Stream是一个建立在Spring Boot和Spring Integration之上的框架,有助于创建事件驱动或消息驱动的微服务。

    spring集成rabbitMq(基于direct、topic和fanout模式)

    通过上述步骤,你可以在Spring应用程序中成功集成RabbitMQ,并利用direct、topic和fanout交换器实现高效的消息路由。在实际项目中,根据业务需求选择合适的交换器模式,可以提高系统的可扩展性和可靠性。

    spring集成rabbitmq并实现两个系统间的通信

    本文将详细探讨如何在Spring项目中集成RabbitMQ,并实现两个系统间的通信。 首先,我们需要在项目中添加RabbitMQ的相关依赖。在Maven的pom.xml文件中,我们需要引入Spring AMQP和RabbitMQ的客户端库: ```xml ...

    基于spring集成rabbitMq(基于direct、topic和fanout模式)源码.rar

    在这个基于Spring集成RabbitMQ的源码示例中,我们主要会关注三种不同的交换机类型:direct、topic和fanout。 1. **Direct Exchange(直连交换机)**: 直连交换机是最简单的模型,它将消息路由到绑定键与发布时...

    RabbitMQ与SpringMVC集成

    1. 引入依赖:在项目中添加RabbitMQ的Spring整合依赖,如`spring-amqp`库。 2. 配置RabbitMQ:在Spring的配置文件中,定义连接工厂、信道配置以及RabbitMQ服务器的相关属性。 3. 创建消息模板:使用`RabbitTemplate`...

    RabbitMq 集成Spring

    如果你使用Spring Boot,集成RabbitMQ变得更简单。只需在`application.properties`或`yaml`文件中配置RabbitMQ的相关属性,Spring Boot会自动配置所需的bean。 总的来说,通过Spring与RabbitMQ的集成,我们可以方便...

    RabbitMQ整合spring示例代码(java maven)

    将RabbitMQ与Spring整合,可以更好地管理和处理消息传递。 本示例代码基于Java和Maven构建,展示了如何在Spring项目中集成RabbitMQ。以下是集成过程的关键步骤和知识点: 1. **依赖管理**:首先,在Maven的`pom....

    java rabbitmq动态注册,监听实现

    在这个场景中,"java rabbitmq动态注册,监听实现"涉及到的主要知识点是利用Spring Boot框架与RabbitMQ集成,动态配置消费者,并实现实时监听消息。 1. **Spring Boot与RabbitMQ集成**: Spring Boot简化了...

Global site tag (gtag.js) - Google Analytics