Spring-AMQP之RabbitMQ实现


使用:

导入依赖:

<dependency>
	   <groupId>org.springframework.amqp</groupId>
	   <artifactId>spring-rabbit</artifactId>
	   <version>1.4.0.RELEASE</version>
</dependency>

 

1.消费者:

/**
 * 消费者
 *
 */
public class Foo {

    //具体执行业务的方法
    public void listen(String foo) {
        System.out.println("消费者: " + foo);
    }
}

2.生产者:

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringMain {
    public static void main(final String... args) throws Exception {
        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(); //容器销毁
    }
}

3.配置文件:

3.1、定义连接工厂

<!-- 定义RabbitMQ的连接工厂 -->
<rabbit:connection-factory id="connectionFactory"
	host="127.0.0.1" port="5672" username="kaola" password="kaola"
	virtual-host="/kaola" />

3.2、定义模板

<!-- 定义Rabbit模板,指定连接工厂以及定义exchange -->
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" exchange="fanoutExchange" />

 
 3.3、定义队列交换机以及完成队列和交换机的绑定

<!-- 定义队列,自动声明 -->
<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>

3.3.1、另一种模板及交换机的绑定

<rabbit:template id="amqpTemplate" connection- factory="connectionFactory" exchange="myExchange"routing-key="foo.bar" />

<rabbit:topic-exchange name="myExchange">
	<rabbit:bindings>
		<rabbit:binding queue="myQueue" pattern="foo.*" />
	</rabbit:bindings>
</rabbit:topic-exchange>

3.4、定义监听

<!-- 队列监听 -->
<rabbit:listener-container connection-factory="connectionFactory">
      <rabbit:listener ref="foo" method="listen" queue-names="myQueue" />
</rabbit:listener-container>

<bean id="foo" class="cn.kaola.rabbitmq.spring.Foo" />

 

3.5、定义管理用于管理队列交换机等

<!-- MQ的管理,包括队列、交换器等 -->
<rabbit:admin connection-factory="connectionFactory" />

 

 以上配置完整版本:

<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="kaola" password="kaola"
		virtual-host="kaola" />

	<!-- 定义Rabbit模板,指定连接工厂以及定义exchange -->
	<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" exchange="fanoutExchange" />

	<!-- 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:listener-container connection-factory="connectionFactory">
		<rabbit:listener ref="foo" method="listen" queue-names="myQueue" />
	</rabbit:listener-container>

	<bean id="foo" class="cn.kaola.rabbitmq.spring.Foo" />

</beans>

猜你喜欢

转载自liweirr789.iteye.com/blog/2377483