RabbitMQ入门

  • 目的:系统间解耦、系统间通信

  • 特点:

    • 基于AMQP协议,由erlang语言开发
    • 对数据一致性要求更高
    • 在Spring上方便整合
  • Hello World模型
    在这里插入图片描述

    • 发布消息

    //创建连接mq的工厂对象
    ConnectionFactory connectionFactory = new ConnectionFactory();
    //设置连接RabbitMQ主机
    connectionFactory.setHost("***.***.***.***");
    //设置端口号
    connectionFactory.setPort(1234);
    //设置连接哪个虚拟主机
    connctionFactory.setVirtualHost("虚拟主机名");
    //设置访问虚拟主机的用户名和密码
    connectinFactory.setUsername("用户名");
    connectionFactory.setPassword("密码");
    //获取连接对象
    Connection connection = connectionFactory.newConnection();
    //获取连接中的通道
    Channel channel = connection.createChannel();
    //通道绑定对应消息队列(自动创建队列)
    /**
     * 第一个参数为:队列名
     * 第二个参数为:队列是否持久化
     * 第三个参数为:是否独占队列(其他连接是否可以使用)
     * 第四个参数为:消费完是否自动删除
     * 第五个参数为:额外参数
     */
    channel.queueDeclare("队列名",false,false,false,null);
    //发布消息
    channel.basicPublish("交互机名","队列名",null,"消息内容".getBytes());
    //关闭通道
    channel.close();
    //关闭连接
    connection.close();
 - 接收消息

    //创建连接mq的工厂对象
    ConnectionFactory connectionFactory = new ConnectionFactory();
    //设置连接RabbitMQ主机
    connectionFactory.setHost("***.***.***.***");
    //设置端口号
    connectionFactory.setPort(1234);
    //设置连接哪个虚拟主机
    connctionFactory.setVirtualHost("虚拟主机名");
    //设置访问虚拟主机的用户名和密码
    connectinFactory.setUsername("用户名");
    connectionFactory.setPassword("密码");
    //获取连接对象
    Connection connection = connectionFactory.newConnection();
    //获取连接中的通道
    Channel channel = connection.createChannel();
    //通道绑定对应消息队列(自动创建队列)
    /**
     * 第一个参数为:队列名
     * 第二个参数为:队列是否持久化
     * 第三个参数为:是否独占队列(其他连接是否可以使用)
     * 第四个参数为:消费完是否自动删除
     * 第五个参数为:额外参数
     */
    channel.queueDeclare("队列名",false,false,false,null);
    //消费消息
    channel.basicConsume("队列名", true, new DefaultConsumer(channel) {
        @Override
        public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
            System.out.println(new String(body, "UTF-8"));
        }
    });
  • 平均消费模型
    在这里插入图片描述

    • 多个消费者之间消息均等(即每个消费者平均分配任务)
  • 能者多劳模型

    • channel.basicConsume的第二个参数默认为true,意为消费者自动向RabbitMQ确认消息(平均分配)不关心业务是否执行完
    • 将其第二个参数改为false即可变为能者多劳模型
  • 扇出模型(广播)在这里插入图片描述

    • 生产者发布一个西欧阿西后所有生产者都能拿到
    • 发布消息之前需要创建一个交换机,并用channel.exchangeDeclare()替换channel.basicDeclare()
    • 同时,队列要换为临时队列
    //创建临时队列
    String queueName = channel.queueDeclare().getQueue();
    //绑定临时队列
    channel.queueBind(queueName,"交换机名","路由key");
  • 路由模型

    • 与广播类似,但不是所有消费者都能消费,只有路由key相同的消费者可以消费
    • 设置channel.basicPublish的第二个参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ是一款使用Erlang语言开发的开源消息中间件,实现了AMQP(高级消息队列协议)。它具有以下特点: 1. 可靠性:支持持久化、传输确认、发布确认等机制,保证了消息的可靠性。 2. 灵活的消息分发策略:消息在进入RabbitMQ之前由交换机进行路由,可以根据不同的分发策略进行消息的分发,包括简单模式、工作队列模式、发布订阅模式、路由模式、通配符模式等。 3. 支持集群:多台RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker,提高了可用性和扩展性。 4. 支持多种协议和语言客户端:RabbitMQ支持多种消息队列协议,如STOMP、MQTT等,同时也支持多种编程语言的客户端。 5. 可视化管理界面:RabbitMQ提供了一个易用的用户界面,方便用户监控和管理消息Broker。 6. 插件机制:RabbitMQ提供了许多插件,可以通过插件进行扩展,也可以编写自己的插件。 要开始使用RabbitMQ,首先需要安装RabbitMQ并配置相关信息。在Windows系统中,可以按照官方文档的指引进行安装。在配置文件中,需要指定RabbitMQ的主机、端口、用户名和密码等信息。 参考资料: \[1\] RabbitMQ官网 \[2\] application.yml配置文件 \[3\] RabbitMQ入门指南文章 希望这些信息对你有帮助! #### 引用[.reference_title] - *1* *2* *3* [超详细的RabbitMQ入门](https://blog.csdn.net/Rok728/article/details/123106242)[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^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值