当前位置:   article > 正文

SpringBoot整合RabbitMQ(超详细)_spring boot如何整合rabbitmq

spring boot如何整合rabbitmq

RabbitMQ简介
RabbitMQ是一个流行的开源消息代理,它遵循AMQP(高级消息队列协议)标准,提供了可靠的消息传递机制。它支持多种消息传递模式,包括点对点(P2P)和发布/订阅(Pub/Sub),并且具有高度的可扩展性和灵活性。

安装和配置RabbitMQ
步骤1:安装RabbitMQ
根据你的操作系统,选择合适的方式安装RabbitMQ。你可以从RabbitMQ官方网站下载安装程序或使用包管理工具进行安装。

步骤2:启动RabbitMQ服务器
安装完成后,启动RabbitMQ服务器。在大多数情况下,你只需在终端中运行以下命令

rabbitmq-server

步骤3:管理界面(可选)
RabbitMQ提供了一个Web管理界面,方便监视和管理消息队列。你可以通过以下方式启用管理界面:

 rabbitmq-plugins enable rabbitmq_management

然后,通过浏览器访问http://localhost:15672/,并使用默认的用户名和密码(guest/guest)登录管理界面。 

一、工作队列模式

一个生产者一个队列,对应多个消费者

消费者之间是竞争关系,一条消息只能让一个消费者去消费

用于任务过重或者任务比较多的情况,工作队列可以提高任务的处理速度

二、订阅模式

一个生产者一个交换机(类型:Fanout),多个队列多个消费者

交换机与队列进行绑定,路由K可以为空字符串,一条消息交换机会分发给订阅自己的队列

交换机的作用:接受消息且自己明确该给把消费发给那个队列

三、路由模式

一个生产者一个交换机(类型Direct)多个队列,交换机和队列绑定的时候,需要定义RoutingKey(路由K)

生产者生产消息的时候,需要标识路由K的名字

应用场景:日记收集 error info warning(分别对应三个队列),如果是error日志就走eroor队列,如果是info就走info队列

四、通配符模式

一个生产者一个交换机(类型、Topic)多个队列,交换机和队列绑定的时候,需要定义RoutingKey(路由K)

既能实现订阅模式也能实现路由模式

*代表一个单词

#代表0个或多个

使用RabbitMQ创建消息队列
步骤1:创建连接
首先,你需要创建一个与RabbitMQ服务器的连接。可以使用RabbitMQ的Java客户端库进行连接。

import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
 
public class RabbitMQConnection {
    public static Connection getConnection() throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost"); // RabbitMQ服务器的地址
        factory.setUsername("guest");
        factory.setPassword("guest");
        return factory.newConnection();
    }
}
步骤2:创建通道
在建立连接之后,需要创建一个通道(Channel),用于发送和接收消息。

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
 
public class RabbitMQChannel {
    public static Channel getChannel() throws Exception {
        Connection connection = RabbitMQConnection.getConnection();
        return connection.createChannel();
    }
}
步骤3:声明队列
在发送和接收消息之前,你需要声明一个队列。

import com.rabbitmq.client.Channel;
 
public class QueueDeclare {
    public static void main(String[] args) throws Exception {
        Channel channel = RabbitMQChannel.getChannel();
        String queueName = "my_queue";
        channel.queueDeclare(queueName, false, false, false, null);
        System.out.println("Queue declared: " + queueName);
    }
}
步骤4:发送消息
发送消息到队列:

import com.rabbitmq.client.Channel;
 
public class SendMessage {
    public static void main(String[] args) throws Exception {
        Channel channel = RabbitMQChannel.getChannel();
        String exchangeName = "";
        String routingKey = "my_queue";
        String message = "Hello, RabbitMQ!";
        channel.basicPublish(exchangeName, routingKey, null, message.getBytes());
        System.out.println("Message sent: " + message);
    }
}
步骤5:接收消息
从队列接收消息:

import com.rabbitmq.client.*;
 
public class ReceiveMessage {
    public static void main(String[] args) throws Exception {
        Channel channel = RabbitMQChannel.getChannel();
        String queueName = "my_queue";
        channel.basicConsume(queueName, true, new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) {
                String message = new String(body);
                System.out.println("Received message: " + message);
            }
        });
    }
}

RabbitMQ主要解决什么问题 
abbitMQ是一个开源的消息代理(Message Broker),它主要用于解决以下问题和应用场景:

异步通信:RabbitMQ允许应用程序在异步模式下进行通信,发送者将消息放入队列中,而接收者从队列中获取消息。这种异步通信方式可以提高系统的可伸缩性和性能,允许不同部分的应用程序独立运行和扩展。

解耦:通过将消息队列引入应用程序架构,不同组件之间可以通过发送和接收消息来解耦。这意味着生产者和消费者可以独立开发和部署,不需要知道彼此的存在,从而降低了系统的复杂性。

消息传递:RabbitMQ提供了可靠的消息传递机制,确保消息在传输过程中不会丢失。这对于需要可靠消息传递的应用程序非常重要,如金融交易系统或电子商务应用程序。

负载均衡:使用RabbitMQ可以轻松实现负载均衡。多个消费者可以订阅同一个队列,从而确保消息被均匀地分发给不同的消费者,以提高系统的性能和吞吐量。

消息持久化:RabbitMQ允许将消息持久化存储,即使在RabbitMQ服务器重启后,消息也不会丢失。这对于关键的业务数据非常重要,以确保数据的安全性和可靠性。

延迟处理:RabbitMQ可以用于实现延迟处理,将消息发送到队列后,可以设置消息的过期时间,以便在一定时间后才被消费者处理。这对于需要执行定时任务或调度的应用程序非常有用。

日志传输:RabbitMQ可以用于将日志消息从应用程序发送到集中式日志系统,以便监控和分析应用程序的性能和健康状况。

事件驱动架构:RabbitMQ可以用于构建事件驱动的架构,使不同部分的应用程序可以相应事件进行协作和通信,从而更容易构建响应式和可扩展的系统。

总之,RabbitMQ解决了分布式系统中的消息传递、异步通信、解耦、负载均衡、消息持久化、延迟处理等一系列与消息相关的问题,使得构建复杂的分布式应用变得更加容易和可靠。它在各种应用场景中得到广泛应用,包括微服务架构、云计算、大数据处理等。

总结
RabbitMQ是一个强大的消息代理,可以帮助你实现可靠的消息传递,用于构建分布式系统和微服务架构。通过以上步骤,你可以轻松地开始使用RabbitMQ来创建消息队列,发送和接收消息。这只是RabbitMQ的入门,它还提供了更多高级特性,如交换机、持久化消息、消息确认机制等,可以满足不同应用场景的需求。继续学习和探索RabbitMQ,你将能够更好地应对
————————————————
版权声明:本文为CSDN博主「野鹤、」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yanghezheng/article/details/126727953

一、交换机

方法类型:Exchange

创建交换机方法:ExchangeBuilder.交换机类型(交换机名字).是否持久化,是否自动删除

二、队列

方法类型Queue

创建队列方法:QueueBuolder.durable(是否持久化)

三、交换机和队列互相绑定:

BindingBuilder.bind(交换机名字).to(队列名字).with(路由K)

四、发送消息

注入RabbitTemplate

发送消息方法:convertAndSend(交换机名字,路由K,消息内容)

五、消息的可靠投递

消息的整个过程:消息先发送到交换机----交换机通过路口K发送到对应的队列里面去

1、消息确认模式,消息发送到交换机时会返回回调函数(成功还是失败)

2、退回模式,交换机发送给队列,只有失败时会触发

定义回调函数

六、死信队列DLX

1、消息成为死信的是那种情况

        队列消息长度达到限制

        消费者拒绝消费消费消息

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/516803
推荐阅读
相关标签
  

闽ICP备14008679号