springboot整合rabbitMQ

《这里使用rabbitMQ的topic模式作为示例》

一:消息生产端

(1):引入依赖

	<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
    </dependencies>

(2):配置application.yml
这里都是默认配置。不做修改的话可以不用写。
virtual-host: / rabbitMQ默认的虚拟机为 /。

spring:
  rabbitmq:
    host: localhost
    port: 5672
    virtual-host: /
    username: guest
    password: guest

(3):编写rabbieMQ的配置类

package com.test;

import org.springframework.amqp.core.*;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConf {
     
    //定义交换机名称
    public static final String TOPIC_EXCHANGE = "topic_exchange";
    //定义队列名称
    public static final String TOPIC_QUEUE1 = "topic_queue1";
    public static final String TOPIC_QUEUE2 = "topic_queue2";

    //声明交换机
    @Bean("TopicExchange")
    public Exchange topicExchange(){
     
        return ExchangeBuilder.topicExchange(TOPIC_EXCHANGE).durable(true).build();
    }

    //声明队列
    @Bean("Queue1")
    public Queue Queue1(){
     
        return QueueBuilder.durable(TOPIC_QUEUE1).build();
    }
    @Bean("Queue2")
    public Queue Queue2(){
     
        return QueueBuilder.durable(TOPIC_QUEUE2).build();
    }

    //绑定队列和交换机。因为有两个队列,要绑定两次
    @Bean
    public Binding Queue1Exchange(@Qualifier("Queue1") Queue queue, @Qualifier("TopicExchange") Exchange exchange){
     
        //with("it.#)声明队列Queue1的路由通配符,#表示可以有任意个单词。*表示只能有一个单词
        return BindingBuilder.bind(queue).to(exchange).with("it.#").noargs();
    }

    @Bean
    public Binding Queue2Exchange(@Qualifier("Queue2") Queue queue, @Qualifier("TopicExchange") Exchange exchange){
     
        return BindingBuilder.bind(queue).to(exchange).with("it.*").noargs();
    }

}

(4):使用RabbitTemplate模板发送消息

package com.itheima.rabbitmq;

import com.itheima.rabbitmq.config.RabbitMQConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class RabbitMQTest {
     

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void test(){
     
    //convertAndSend(交换机名称,路由ey,要发送的内容)
    //由于队列一我们设置的路由Key为it.#。这条消息将路由到队列一。
        rabbitTemplate.convertAndSend(RabbitMQConfig.TOPIC_EXCHANGE, "it.insert.insert", "商品新增,routing key 为it.insert.insert");
  
  	//由于队列一我们设置的路由Key为it.*。这条消息将路由到队列一和队列二。
        rabbitTemplate.convertAndSend(RabbitMQConfig.TOPIC_EXCHANGE, "it.delete", "商品删除,routing key 为it.delete");
    }
}

二:消息消费端

(1):引入依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
    </dependencies>

(2):配置application.yml

spring:
  rabbitmq:
    host: localhost
    port: 5672
    virtual-host: /
    username: guest
    password: guest

(3):定义监听类监听消息队列

package com.itheima.rabbitmq.listener;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class MyListener {
     

    /**
     * 监听某个队列的消息
     * @param message 接收到的消息
     */
    @RabbitListener(queues = "topic_queue1")
    public void myListener1(String message){
     
        System.out.println("接收到topic_queue1的消息为:" + message);
    }

	@RabbitListener(queues = "topic_queue2")
    public void myListener1(String message){
     
        System.out.println("接收到topic_queue2的消息为:" + message);
    }
}

你可能感兴趣的:(rabbitmq)