RabbitMQ 与Spring整合

2018-07-06|来源:

添加spring与rabbitmq整合的依赖
<dependency>
    <groupId>org.springframework.amqp</groupId>
    <artifactId>spring-rabbit</artifactId>
    <version>1.6.0.RELEASE</version>
</dependency>



整合spring配置文件如下:

<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/rabbit
    http://www.springframework.org/schema/rabbit/spring-rabbit-1.4.xsd
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.1.xsd">
    <!-- 定义RabbitMQ的连接工厂 -->
    <rabbit:connection-factory id="connectionFactory"
        host="127.0.0.1" port="5672" username="test" password="test"
        virtual-host="/testvhost" />
    <!-- 定义Rabbit模板,指定连接工厂以及定义exchange -->
    <rabbit:template id="amqpTemplate" connection-factory="connectionFactory"
                     exchange="fanoutExchange" />
    <!--
    <rabbit:template id="amqpTemplate" connection-factory="connectionFactory"
        exchange="fanoutExchange" routing-key="foo.bar" />
    -->
    <!-- MQ的管理,包括队列、交换器等 -->
    <rabbit:admin connection-factory="connectionFactory" />
    <!-- 定义队列,自动声明 -->
    <rabbit:queue name="myQueue" auto-declare="true"/>
    <!-- 定义交换器,自动声明 -->
    <rabbit:fanout-exchange name="fanoutExchange" auto-declare="true">
        <rabbit:bindings>
            <rabbit:binding queue="myQueue"/>
        </rabbit:bindings>
    </rabbit:fanout-exchange>
    <!--
    <rabbit:topic-exchange name="myExchange">
        <rabbit:bindings>
            <rabbit:binding queue="myQueue" pattern="foo.*" />
        </rabbit:bindings>
    </rabbit:topic-exchange>
    -->
    <!-- 队列监听 -->
    <rabbit:listener-container connection-factory="connectionFactory">
        <rabbit:listener ref="foo" method="listen" queue-names="myQueue" />
    </rabbit:listener-container>
    <bean id="foo" class="com._656463.rabbitmq.vo.Foo" />
</beans>


生产者
package com._656463.rabbitmq.test;
import org.junit.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
 * Created by hadoop on 16-6-29.
 */
public class SpringTest {
    @Test
    public void test() throws InterruptedException {
        AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:spring/rabbitmq-context.xml");
        //RabbitMQ模板
        RabbitTemplate template = ctx.getBean(RabbitTemplate.class);
        //发送消息
        template.convertAndSend("Hello, world!");
        Thread.sleep(1000);// 休眠1秒
        ctx.destroy(); //容器销毁
    }
}


消费者
package com._656463.rabbitmq.vo;
/**
 * 消费者
 */
public class Foo {
    //具体执行业务的方法
    public void listen(String foo) {
        System.out.println("消费者: " + foo);
    }
}


书生整理于网络


相关问答

更多

Spring整合RabbitMQ 一直收到重复消息怎么处理

下面是RabbitMQ的消息确认机制:“为了确保消息不会丢失,RabbitMQ支持消息确认机制。客户端在接受到消息并处理完后,可以发送一个ack消息给RabbitMQ,告诉它该消息可以安全的删除了。假如客户端在发送ack之前意外死掉了,那么RabbitMQ会将消息投..

Spring整合RabbitMQ 一直收到重复消息怎么处理

下面是RabbitMQ的消息确认机制:“为了确保消息不会丢失,RabbitMQ支持消息确认机制。客户端在接受到消息并处理完后,可以发送一个ack消息给RabbitMQ,告诉它该消息可以安全的删除了。假如客户端在发送ack之前意外死掉了,那么RabbitMQ会将消息投递到下一个consumer客户端。如果有多个consumer客户端,RabbitMQ在投递消息时是轮询的。RabbitMQ如何判断客户端死掉了?唯一根据是客户端连接是否断开。这里没有超时机制,也就是说客户端可以处理一个消息很长时间,只要 ...

Spring整合RabbitMQ 一直收到重复消息怎么处理

收到重复消息的可能情况有如下几点 发送方一条消息发送了多次。 接收到消息后,没有正确通知rabbitmq消息已被消费,导致消息仍然处于队列中,所以被再次发送。

Spring整合RabbitMQ 一直收到重复消息怎么处理

收到重复消息的可能情况有如下几点 发送方一条消息发送了多次。 接收到消息后,没有正确通知rabbitmq消息已被消费,导致消息仍然处于队列中,所以被再次发送。

Spring整合RabbitMQ 一直收到重复消息怎么处理

收到重复消息的可能情况有如下几点 发送方一条消息发送了多次。 接收到消息后,没有正确通知rabbitmq消息已被消费,导致消息仍然处于队列中,所以被再次发送。 请检查上述两点,希望能够帮到你。

RabbitMQ 教程

相关文章

更多

最近更新

更多