RabbitMQ配置生产者和消费者

默认已经安装好RabbitMQ服务,且在RabbitMQ管理端页面(默认port:15672)上需创建exchange、queue及exchange与queue绑定关系等

下面进行项目中生产者和消费者的配置

一、添加依赖

在项目文件pom.xml中添加依赖

<!-- RabbitMQ集成spring -->
<!-- https://mvnrepository.com/artifact/org.springframework.amqp/spring-rabbit -->

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

二、生产者

1.配置

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

    <!--   其他配置  -->


    <!-- rabbit连接 -->
    <rabbit:connection-factory id="connectionFactory"
                                username="guest"
                                password="guest"
                                host="192.168.8.130"
                                port="5672"
                                channel-cache-size="50"
                                publisher-returns="true"
                                publisher-confirms="true"
                                connection-timeout="5000"
                                />

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

    <!-- 消息格式转化 -->
    <bean id="jsonMessageConverter"  class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter"/>

    <!-- 设置交换器 用于数据发送-->
    <rabbit:template id="rabbitProviderName" exchange="exchange-name"  connection-factory="connectionFactory" message-converter="jsonMessageConverter" />

    <!-- 设置队列 -->
    <rabbit:queue id="queue-id" durable="true" auto-delete="false" exclusive="false" name="queues-name" />
    <!-- durable:是否持久化; exclusive: 仅创建者可以使用的私有队列,断开后自动删除; auto_delete: 当所有消费客户端连接断开后,是否自动删除队列 -->    

</beans>

2.代码-生产者生产消息

package com.api;

import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
//其他 import

public class ConsumerHandlerClass 
{
    @Autowired  
    private RabbitTemplate rabbitProviderName; //rabbitProviderName 需要和配置中template的id对应

    public void sendMessage(){
        Message message = new Message(("{\"key\":1}").getBytes(), new MessageProperties());
        rabbitProviderName.send(message);
    }
}

三、消费者

1.配置

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

    <!--  其他配置  -->

    <!-- rabbit连接 -->
    <rabbit:connection-factory id="connectionFactory"
                                username="guest"
                                password="guest"
                                host="192.168.8.130"
                                port="5672"
                                channel-cache-size="50"
                                publisher-returns="true"
                                publisher-confirms="true"
                                connection-timeout="5000"
                                />

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

    <!-- 消息格式转化 生产者生产的数据转换为json存入消息队列-->
    <bean id="jsonMessageConverter"  class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter"/>

    <!-- 设置交换器 用于数据接口-->
    <rabbit:template id="consumerTemplate" connection-factory="connectionFactory" exchange="exchange-name" message-converter="jsonMessageConverter"/>

    <!-- topic -->
    <rabbit:topic-exchange name="exchange-name" durable="true" auto-delete="false">
        <rabbit:bindings>
            <rabbit:binding queue="queue-id" pattern="queues-name.*"/>
        </rabbit:bindings>
    </rabbit:topic-exchange>

    <!-- 接收消息类 自定义接口类-->
    <bean id="consumerHandler" class="com.api.ConsumerHandlerClass"/>

    <!-- 消息的监听的代理类 支付回调-->
    <bean id="receiveListenerAdapter" class="org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter">
        <constructor-arg ref="consumerHandler" />
        <property name="defaultListenerMethod" value="handlerFunc"></property> <!-- 接收消息类中的方法,自定义接口类的默认方法 -->
        <property name="messageConverter" ref="jsonMessageConverter"></property>
    </bean>

    <!-- 监听容器 -->
    <rabbit:listener-container connection-factory="connectionFactory">
        <rabbit:listener queues="queue-id" ref="receiveListenerAdapter"/>
        <!-- 此处可以继续监听多队列 <rabbit:listener queues="queue-id2" ref="receiveListenerAdapter2"/>-->
    </rabbit:listener-container>

</beans>

2.代码-消费者处理消息

package com.api;

//其他 import

public class ConsumerHandlerClass 
{
    public void handlerFunc(HashMap arguments) {
        //arguments 是生产者产生的消息
    }
}
posted @ 2020-06-21 19:29  预立科技  阅读(94)  评论(0编辑  收藏  举报