RabbitMQ之基础学习

本文介绍了RabbitMQ的基础操作流程,包括发布消息、队列原理、实例解析,重点讨论了消息确认机制和如何通过basicQos实现负载均衡。通过示例展示了如何使用basicConsume、basicPublish和queueDeclare等函数,确保消息的可靠传递和消费者负载的公平性。
摘要由CSDN通过智能技术生成

RabbitMQ原理图

在这里插入图片描述
发布消息需要经过Exchange交换机,然后它根据自身的交换类型以及和Queue的Binding Key来决定这条消息是发送到哪个队列。

基本操作流程

  1. 创建ConnectionFactory对象,利用抽象工厂模式获取连接。
  2. 从获取的连接中获取通道。
  3. 创建队列,将通道与队列绑定。
  4. 生产者通过将消息放入队列中,消费者创建消费对象从队列中获取消息。

实例1

描述

生产者:在现实生活中就好比制造商品的工厂,他们是商品的生产者。生产者只意味着发送。发送消息的程序称之为一个生产者。我们用“P”表示。

队列:队列就像存放商品的仓库或者商店,是生产商品的工厂和购买商品的用户之间的中转站。队列就像是一个仓库或者流水线。在RabbitMQ中,信息流从你的应用程序出发,来到RabbitMQ的队列,所有信息可以只存储在一个队列中。队列可以存储很多的消息,因为它基本上是一个无限制的缓冲区,前提是你的机器有足够的存储空间。多个生产者可以将消息发送到同一个队列中,多个消费者也可以只从同一个队列接收数据。这就是队列的特性。

消费者:消费者就好比是从商店购买或从仓库取走商品的人,消费的意思就是接收。消费者是一个程序,主要是等待接收消息。我们的用“C”表示。

注意:生产者,消费者和队列(RabbitMQ)不必部署在同一台机器上。实际在生产环境的大多数应用中,他们都是分开部署的。

我们通过2个Java程序,一个发送消息的生产者、一个接收信息并打印的消费者。
在这里插入图片描述

代码

public class Producer {
   
    //队列命名
    public static final String QUEUE_NAME="hello";

    public static void main(String[] args) {
   
        //创建工厂
        ConnectionFactory connectionFactory=new ConnectionFactory();
        //设置属性
        connectionFactory.setHost("master");
        connectionFactory.setUsername("mall");
        connectionFactory.setPassword("mall");

        try {
   
            //获得连接
            Connection connection=connectionFactory.newConnection();

            //创建通道
            Channel channel=connection.createChannel();
            //创建队列
            channel.queueDeclare(QUEUE_NAME,false,false,false,null);
            String msg="hello world!!";

            //发送消息
            /*
            exchange 交换器名称
            props 有14个成员
            body 消息体,payload真正需要发送的消息
             */
            channel.basicPublish("",QUEUE_NAME,null,msg.getBytes());

            System.out.println("发送"+msg+"成功");

            //断开通道和连接
            channel.close();
            connection.close();

        } catch (IOException e) {
   
            e.printStackTrace();
        } catch (TimeoutException e) {
   
            e.printStackTrace();
        }

    }
}

public class Consumer {
   
    //队列命名
    public static final String QUEUE_NAME = "hello";

    public 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值