SpringBoot整合RabbitMQ

MQ全称为Message Queue,即消息队列,是在传输消息的过程中保存消息的容器,是一个中间件,将应用程序进行解耦合,提升系统的容错性和可维护性,RabbitMQ是常见的MQ产品之一。
RabbitMQ的简单模式:
在这里插入图片描述
其中,P表示生产者 就是要发送消息的一方
C:消费者,接收消息,等待消息
中间部分queue表示消息队列,可以缓存消息,生产者向其中投递消息,消费者获取消息。
RabbitMQ的订阅模式:
在这里插入图片描述

订阅模式中多了一个exchange交换机角色,P生产者不在将消息直接发送到队列中,而是将消息发送给交换机,消息到交换机时,交换机转发到哪个队列需要根据路由键routing key来决定,exchange交换机一方面接收生产者发送来的消息,一方面知道如何处理消息,例如将消息递交给某个队列,或丢弃消息,且exchange只负责转发消息,并不具备存储信息的能力,到底怎样操作取决于exchange的类型,常见exchange类型有以下三种:
Fanout:广播,将消息交给所有绑定到交换机的队列
Direct:定向,将消息交给符合指定routing key的队列
Topic:通配符,将消息交给符合路由模式的队列
Direct Exchange:是默认交换模式,根据key匹配寻找队列
Topic Exchange:根据通配符转发消息,队列和交换机绑定会定义一种路由模式,可以根据路由模式和 routing key 把消息路由到不同的队列。
(routing key路由键必须是字符,用(.)隔开,例如item.insert
路由模式必须包含一个(#匹配一个或多个词)或(*匹配一个词)用于和路由键匹配,例如item.#匹配item.insert.abc,item.*匹配item.insert。)
Fanout Exchange:消息广播模式,会把消息发给绑定它的全部队列,配置了routing key也会被忽略。
SpringBoot整合RabbitMQ
在SpringBoot开发中,生产者工程中:
1.application.yml文件配置RabbitMQ相关信息;
2. 在生产者工程中编写配置类,用于创建交换机和队列,并进行绑定
3. 注入RabbitTemplate对象,通过RabbitTemplate对象发送消息到交换机
在SpringBoot开发中,消费者工程中:
1.application.yml文件配置RabbitMQ相关信息
4. 创建消息处理类,用于接收队列中的消息并进行处理
创建工程,添加依赖

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit</artifactId>
            <version>2.1.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.1.7.RELEASE</version>
        </dependency>
    </dependencies>

启动类

@SpringBootApplication
public class ProducerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProducerApplication.class);
    }
}

创建application.yml

spring:
  rabbitmq:
    host: 192.168.194.128
    port: 5672
    virtual-host: /xzk
    username: zhang
    password: zhang

绑定交换机和队列


@Configuration
public class RabbitMQConfig {
//    交换机名称
    public static  final String ITEM_TOPIC_EXCHANGE="springboot_item_topic_exchange";
//    队列名称
    public  static final String ITEM_QUEUE="springboot_item_queue";

//  声明交换机
    @Bean("itemTopicExchange")
    public Exchange topicExchange(){
        return ExchangeBuilder.topicExchange(ITEM_TOPIC_EXCHANGE).durable(true).build();
    }
//    声明队列
    @Bean("itemQueue")
    public Queue itemQueue(){
        return QueueBuilder.durable(ITEM_QUEUE).build();
    }
//    绑定队列 交换机
@Bean
    public Binding itemQueueExchange(@Qualifier("itemQueue") Queue queue,
                                 @Qualifier("itemTopicExchange") Exchange
                                         exchange){
    return BindingBuilder.bind(queue).to(exchange).with("item.#").noargs();
}

运行生产者

@RunWith(SpringRunner.class)
@SpringBootTest

public class ProducerTest {
    @Resource
    private RabbitTemplate rabbitTemplate;

    @Test
    public void testQueue(){
        rabbitTemplate.convertAndSend(RabbitMQConfig.ITEM_TOPIC_EXCHANGE,
                "item.insert", "商品新增,routing key 为item.insert");
        rabbitTemplate.convertAndSend(RabbitMQConfig.ITEM_TOPIC_EXCHANGE,
                "item.update", "商品修改,routing key 为item.update");
        rabbitTemplate.convertAndSend(RabbitMQConfig.ITEM_TOPIC_EXCHANGE,
                "item.delete", "商品删除,routing key 为item.delete");

    }
}

创建消费者工程
添加依赖

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

启动类


@SpringBootApplication
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class);
    }
}

application.yml

spring:
  rabbitmq:
    host: 192.168.194.128
    port: 5672
    virtual-host: /xzk
    username: zhang
    password: zhang

消息监听处理类


@Component
public class MyLinstener {
    @RabbitListener(queues = "springboot_item_queue")
    public  void myListener(String message){
        System.out.println("消费者接收");
    }
}

Spring Boot框架可以很容易地与RabbitMQ进行集成。为了实现这个目标,你需要在项目的依赖项中添加两个关键的依赖项。首先,你需要添加spring-boot-starter-amqp依赖项,它提供了与RabbitMQ进行通信的必要类和方法。其次,你还需要添加spring-boot-starter-web依赖项,以便在项目中使用Web功能。 在你的项目中创建两个Spring Boot应用程序,一个是RabbitMQ的生产者,另一个是消费者。通过这两个应用程序,你可以实现消息的发送和接收。生产者应用程序负责将消息发送到RabbitMQ消息队列,而消费者应用程序则负责从队列中接收并处理消息。这样,你就可以实现基于RabbitMQ消息传递系统。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringBoot整合RabbitMQ](https://blog.youkuaiyun.com/K_kzj_K/article/details/106642250)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Springboot 整合RabbitMq ,用心看完这一篇就够了](https://blog.youkuaiyun.com/qq_35387940/article/details/100514134)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [undefined](undefined)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值