您的位置:首页 > 编程语言 > Java开发

web项目中spring如何整合RabbitMQ?

2017-08-29 14:45 477 查看
如何在Windows下安装rabbitMQ?这个问题已在我的上一篇文章中讲解清楚,不清楚的同学可以看看我的上一篇文章。 


Windows下安装及配置RabbitMQ?




接下来讲解如何在web项目中配合spring来使用rabbitMQ?



一、若是maven工程,在pom.xml文件中添加依赖: 若不是maven工程,需自己找jar包加入工程。

<!-- RabbitMQ -->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.4.5.RELEASE</version>
</dependency>

二、项目中新建配置文件 spring-rabbit.xml

<?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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/rabbit
       http://www.springframework.org/schema/rabbit/spring-rabbit-1.5.xsd        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<context:property-placeholder location="cl
11eb0
asspath*:/META-INF/env/*.properties" />

<!--<util:properties id="appConfig" location="classpath:/META-INF/env/rabbit.properties"></util:properties>-->

<!--配置connection-factory,指定连接rabbit server参数-->
<rabbit:connection-factory id="connectionFactory" username="guest" password="guest"
host="localhost"
port="5672"
virtual-host="/"/> <!-- virtual-host="/"是默认的虚拟机路径-->

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

<!--定义queue-->
<rabbit:queue id="com.mj.test" name="com.mj.test" durable="true" auto-delete="false" exclusive="false"/>

<!-- 定义direct exchange,绑定com.mj.test queue -->
<rabbit:direct-exchange name="myChange" durable="true" auto-delete="false">
<rabbit:bindings>
<rabbit:binding queue="com.mj.test" key="testKey"></rabbit:binding>
</rabbit:bindings>
</rabbit:direct-exchange>

<!--定义rabbit template用于数据的接收和发送-->
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" exchange="myChange" />

<bean id="messageReceiver" class="com.hp.netpro.rf.web.utils.RabbitMQConsumer"/>

<rabbit:listener-container connection-factory="connectionFactory">
<rabbit:listener queues="com.mj.test" ref="messageReceiver"/>
</rabbit:listener-container>

</beans>

   
三、在工程的配置文件applicationContext.xml中增加配置如下:

<?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:aop="http://www.springframework.org/schema/aop"
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/aop        http://www.springframework.org/schema/aop/spring-aop.xsd"> 
<import resource="classpath*:/META-INF/spring/spring-api-mybatis.xml" />
<import resource="classpath*:/META-INF/spring/spring-rabbit.xml" />
<!--<import resource="/META-INF/spring/spring-rabbit.xml"/>-->
<!-- 使能AOP-->
<aop:aspectj-autoproxy/>
<!-- 自动装载bean使能-->
<context:component-scan base-package="com.hp.netpro.rf.web.utils"/>
<context:annotation-config/>

<context:property-placeholder location="classpath*:/META-INF/env/*.properties" />
<!--<util:properties id="appConfig" location="classpath:/META-INF/env/rabbit.properties"></util:properties>-->

<!-- 激活annotation功能 -->
<context:spring-configured />

</beans>

四、新建消息生产者类 RabbitMQProducer.java

packagecom.hp.netpro.rf.web.utils;
importorg.springframework.amqp.core.AmqpTemplate;
importorg.springframework.stereotype.Service;
importjavax.annotation.Resource;
/**
 *
@Description:消息生产者
 *
@Author:
 
*@CreateTime:
 
*/
@Service
public classRabbitMQProducer {

    @Resource
    privateAmqpTemplateamqpTemplate;

    public voidsendMessage(Object message){
        amqpTemplate.convertAndSend("testKey",message);//testKey为配置文件中queue对应的key,指明发送给哪个queue。
    }
}
 
五、新建消息消费者 RabbitMQConsumer.java 

package com.hp.netpro.rf.web.utils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
import org.springframework.stereotype.Service;
/**
 * @Description:消息队列接收者
 * @Author:
 
*@CreateTime:
 
*/
@Service
public class RabbitMQConsumerimplementsMessageListener {
    public voidonMessage(Message message) {

       System.out.println("消息!");

       System.out.println(message);

       System.out.println("消息getMessageProperties!");

       System.out.println(message.getMessageProperties());

       System.out.println("消息getBody");

       System.out.println(message.getBody());

    }

}

六、编写测试方法
/**
 *
@Description:消息队列
 *
@Author:
 
*@CreateTime:
 */

@Resource
private RabbitMQProducer [b]rabbitMQProducer[/b]; //注意:这里必须以这种注入的方式 不能使用new来创建对象,


@ResponseBody
@RequestMapping("/sendMessage")
publicString testQueue() {
    try{
        rabbitMQProducer.sendMessage("I
am amq sender"
);
        return"发送完毕";
    }catch(Exception e){
        e.printStackTrace();
        return"发送失败!!";
    }
}
接下来启动RabbitMQ-Server,启动工程,浏览器访问对应测试方法的RequestMapping。
结果:





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息