spring 整合 rabbitmq

spring 整合 rabbitmq

(rabbitmq的简单认识)

        Rabbitmq 是一种消息队列 消息队列都会包含 producer(生产者),consumer(消费者)及broker(代理)

        RabbitMQ 是信息传输的中间者。本质上,他从生产者(producers)接收消息,转发这些消息给消费者(consumers).换句话说,他能够按根据你指定的规则进行消息转发、缓冲、和持久化。

 (spring+rabbitmq)

首先需要启动rabbitmq 可查看http://blog.csdn.net/raccoon_hzy/article/details/53893379 这个地址进行rabbitmq的安装与启动,接下来就开始入门案例

  一个producer发送消息,一个接收者(consumer)接收消息,并在控制台打印出来。

1,消息生产者(producer)

   1.1  创建一个maven项目

   1.2 在maven项目的pom文件中添加入约束

  

<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>4.1.3.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>4.1.3.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.1.3.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>4.1.3.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>4.1.3.RELEASE</version>
		</dependency>
	

		<!-- amqp队列服务 -->
		<dependency>
			<groupId>org.springframework.amqp</groupId>
			<artifactId>spring-rabbit</artifactId>
			<version>1.4.1.RELEASE</version>
		</dependency>
		<!-- 单元测试 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<type>jar</type>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>4.1.3.RELEASE</version>
		</dependency>

   1.3 编写spring核心配置文件 applicationContext.properties

    

<?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:context="http://www.springframework.org/schema/context"
	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/context
                http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/rabbit
                http://www.springframework.org/schema/rabbit/spring-rabbit-1.4.xsd">
	<!-- 开启注解扫描 -->
	<context:component-scan base-package="com.chainhu" />
	<!-- 加载properties文件 -->
	<bean
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath:application.properties</value>
			</list>
		</property>
	</bean>
	<import resource="classpath:rabbit-config.xml"/>
	</beans>

   1.4 编写参数配置文件 application.properties



   1.5  编写rabbitmq的配置文件rabbit-config.xml

<!-- RabbitMq 配置 开始 -->
	<!-- 创建connectionFactory -->
	<rabbit:connection-factory id="rabbitConnectionFactory"
		host="${host}" port="${port}" username="${username}" password="${password}"
		virtual-host="${virtualhost}" />

	<rabbit:admin connection-factory="rabbitConnectionFactory" />
    
    <!-- 队列生产者 -->
	<rabbit:template id="rabbitAmqpTemplate"
		connection-factory="rabbitConnectionFactory" exchange="${exchange}"
		routing-key="30000" />

	<bean id="rabbitQueueManager" class="com.chainhu.rabbitmq.common.RabbitQueueManager">
		<property name="rabbitAmqpTemplate" ref="rabbitAmqpTemplate" />
	</bean>
	

  1.6 编写测试类 test.class

 

@Test
	public void queueSend(){
		while(true){
		QueueMessage qm = new QueueMessage();
		qm.setCode("0");
		qm.setOrderId("123456");
		qm.setDesc("操作成功!");
		try {
			Thread.sleep(5000);
			boolean b = RabbitQueueManager.queueSend(qm);
			System.out.println(b);
		} catch (Exception e) {
			e.printStackTrace();
		}
		}
	}

  1.7 控制台打印出 true时表示消息发送成功!

2  队列消费者(consumer)

   2.1 建立队列消费者 配置文件 rabbit-config-consumer.xml

 

<!-- RabbitMq 配置 开始 -->
	<!-- 创建connectionFactory -->
	<rabbit:connection-factory id="rabbitConnectionFactory"
		host="${host}" port="${port}" username="${username}" password="${password}"
		virtual-host="${virtualhost}" />

	<rabbit:admin connection-factory="rabbitConnectionFactory" />
	
    <!-- 队列消费者 -->
	<!-- durable="true"队列是否持久化 exclusive="false"当连接不存在时队列是否自动删除 auto-declare="true" -->
	<!-- auto-delete="true" direct交换器 当声明的exchange连接断开时,exchange是否删除 -->
	<rabbit:queue durable="true" exclusive="false"
		auto-declare="true" name="${queue}"></rabbit:queue>
	<!-- consumer 队列消费者监听 -->
	<bean name="rabbitConsumer" class="com.chainhu.rabbitmq.comsumer.RabbitConsumer"
		lazy-init="false" />
	<rabbit:listener-container
		connection-factory="rabbitConnectionFactory" acknowledge="manual">
		<!-- acknowledge="manual" 响应反馈为手动响应 -->
		<rabbit:listener ref="rabbitConsumer" method="onMessage"
			queue-names="${queue}" />
	</rabbit:listener-container>

  2.2 建立队列监听类 RabbitConsumer.class

public class RabbitConsumer implements ChannelAwareMessageListener {

    public void onMessage(Message message, Channel channel) throws Exception {
         try{
             String respMessage = new String(message.getBody(), "UTF-8");
             System.out.println("消费者接收到消息:"+respMessage);
             // 确认返回状态
             channel.basicAck(message.getMessageProperties().getDeliveryTag(), true);
         }catch(Exception e){
             e.printStackTrace();
             channel.basicAck(message.getMessageProperties().getDeliveryTag(), true);
         }
    }

}

  2.3 运行项目 当控制台打印出

{"code":"0","desc":"操作成功!","orderId":"123456"}
 

此时队列消费者建立成功!

spring 整合rabbitmq 简单案例结束!

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值