RabbitMQ

本文介绍了RabbitMQ的基本结构和SpringAMQP的使用,包括基本消息队列的发送和接收,工作消息队列的概念,以及发布订阅模式的三种类型:广播、路由和主题。同时,提到了消息转换器在publisher和consumer中的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.RabbitMQ的结构和概念

 


 2.SpringAMQP


3.常见的消息模型

3.1基本消息队列

(1)HelloWorld类型

该模型的官方介绍:RabbitMQ tutorial - "Hello world!" — RabbitMQ

该模型中具有三个角色:

使用Amqp实现消息发送 :

<1>给父项目中添加依赖

<!--AMQP依赖,包含RabbitMQ-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

<2>配置RabbitMQ的地址(在application.yml文件中)

#添加rabbitmq的配置
spring:
  rabbitmq:
    host: 192.168.14.129 #rabbitmq的主机地址
    port: 5672 #rabbitmq的端口号
    username: itcast
    password: 123321
    virtual-host: /

<3>使用RabbitTemplate的convertAndSend方法发送消息

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void testSendMessage2SimpleQueue() {
        String queueName = "simple.queue";
        String message = "hello,spring amqp!";
//        使用amqp需要在convertAndSend方法中添加连个参数
//        分别为queueName队列名称 和 message消息具体内容
        rabbitTemplate.convertAndSend(queueName, message);
    }

 使用Amqp实现消息接收 :

<1>导入依赖(与发送相同)

<2>添加mq连接信息(与发送相同)

<3>在consumer中新添加一个类,编写消费逻辑

@Component
public class SpringRabbitListener {
    //可监听多个也可监听一个
    @RabbitListener(queues = "simple.queue")
    public void listenSimpleQueue(String message) {
        System.out.println("消费者接收到simple.queue中的消息: " + message);
    }
}

3.2工作消息队列

 该模型的官方介绍:RabbitMQ tutorial - Work Queues — RabbitMQ

listener:
  direct:
    prefetch: 1 #每次只能收到一条消息,只有在这条消息处理完后并ack,才能继续获取下一条消息

3.3发布订阅,根据交换机分为三种

(1)广播

 该模型的官方介绍:RabbitMQ tutorial - Publish/Subscribe — RabbitMQ

 使用SpringAMQP实现该方法:

<1>在consumer中添加一个config类

@Configuration
public class FanoutConfig {

    //声明一个交换机exchange1
    @Bean
    public FanoutExchange fanoutExchange() {
        return new FanoutExchange("itcast.fanout");
    }

    //声明一个队列1
    @Bean
    public Queue fanoutQueue1() {
        return new Queue("fanout.queue1");
    }

    //绑定队列1到交换机
    @Bean
    public Binding fanoutBinding1(Queue fanoutQueue1, FanoutExchange fanoutExchange1) {
        return BindingBuilder.bind(fanoutQueue1).to(fanoutExchange1);
    }

。。。。。。可以跟上面重复添加多个队列并绑定到交换机中

<2>创建Listener方法绑定队列进行监听

@RabbitListener(queues = "fanout.queue1")
public void listenFanoutQueue1(String message) throws InterruptedException {
    System.out.println("消费者接收到fanout.queue1中的消息: " + message + LocalTime.now());
}

<3>编写发布者的发布方法

    public void testSendFanoutExchange() {
//        交换机名称
        String exchange = "itcast.fanout";
//        消息
        String message = "hello,everyone!";
//        发送消息
        rabbitTemplate.convertAndSend(exchange, message);
    }

(2)路由

 该模型的官方介绍:RabbitMQ tutorial - Routing — RabbitMQ
 

一个队列在绑定exchange时可以指定多个key

<1>绑定队列交换机以及设置key值

<2>编写发布者方法

(3)主题

 该模型的官方介绍:RabbitMQ tutorial - Topics — RabbitM

 <1>在consumer方法中声明Exchange、Queue并利用@RabbitListener来声明Exchange、queue、RoutingKey

 <3>创建Publisher方法


4.SpringAMQP的消息转换器

 (1)publisher中配置消息转换器

(2)consumer中配置消息转换器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值