RabbitMQ初识

16 篇文章 0 订阅

RabbitMQ后台管理界面

访问 http://127.0.0.1:15672/

默认用户密码都是 :guest

界面介绍

overView 概述

Connection 连接

channels 频道

Exchanges 交换机

Queues 队列

Admin 用户管理等等

1582719828922

amqp 通信协议 (发消息,收消息)

clustering 集群端口

http 后台端口

用户管理

  • 添加

1582719154880

virtual hosts

问: virtual hosts 是什么?

virtual hosts 相当于 mysql 的 db

  • 添加virtual hosts

1582719400539

一般以 /开头

给用户授权

把刚刚创建的 vhost_m 授权给 user_m

  • 点击 用户 user_m

1582719554160

  • 选择要授权的vhost,点击 set permission

1582719619409

我们便可以看到授权成功

1582719709224

AMQP高级消息队列协议

​ 具有现代特性的二进制协议。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。

AMQP协议模型

在这里插入图片描述

核心概念

Server: 又称Broker,接受客户端的连接,实现AMQP实体服务

Connection: 连接,应用程序与Broker的网络连接

Channel: 网络信道,几乎所有的操作都在 Channel中进行,是进行消息读写的通道。客户端可以建立多个Channel,每个Channel代表一个会话任务

Message:消息,服务器和应用程序之间传送的数据,有 Properties 和 Body 组成。Properties可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body则就是消息题内容。

Virtual host:虚拟地址,用于进行逻辑隔离,最上层的消息路由。一个Virtual Host里面可以有若干个Exchange和Queue,同一个Virtual Host 里面不能有相同名称的Exchange或Queue

Exchange:交换机,接受消息,根据路由键转发消息到绑定的队列

Binding:Exchange和Queue之间的虚拟连接,binding中可以包含routing key

Routing key:一个路由规则,虚拟交换机可用它来确定如何路由一个特定消息

Queue:也成为 Message Queue,消息队列,保存消息并将他们转发给消费者

RabbitMQ的整体架构是什么样子的?

生产者 把消息投递到 指定交换机

交换机 和 队列 绑定

消费者 监听 指定队列

这里写图片描述

RabbitMQ消息是如何流转的?

1582800239661

生产者生产出来一个消息,然后投递到 Exchange上, Exchange把消息发送到 绑定(Routing Key)好的 Queue上

最后监听队列消费

RabbitMQ 的 Helloworld

  • 新建Spring Boot项目

  • 在pom中加入 Rabbitmq依赖

    <dependency>
           <groupId>com.rabbitmq</groupId>
           <artifactId>amqp-client</artifactId>
           <version>3.6.5</version>
    </dependency>
    
  • 生产者

    package com.my.rabbitmqstudy.quickstart;
    
    import com.rabbitmq.client.Channel;
    import com.rabbitmq.client.Connection;
    import com.rabbitmq.client.ConnectionFactory;
    
    public class producter {
        public static void main(String[] args) throws Exception {
    
            //1 创建一个 ConnectionFactory
            ConnectionFactory connectionFactory = new ConnectionFactory();
            connectionFactory.setHost("127.0.0.1");
            connectionFactory.setPort(5672);
            connectionFactory.setVirtualHost("/");
    
            //2 通过工厂创建连接
            Connection connection = connectionFactory.newConnection();
    
            //3 通过 Connection创建一个Channel
            Channel channel = connection.createChannel();
    
            //4 通过Channel 发送数据
            String msg = "hello RabbitMQ";
            for (int i = 0; i < 5; i++) {
                channel.basicPublish("","test001",null,msg.getBytes());
            }
    
            channel.close();
            connection.close();
    
        }
    }
    
    
  • 消费者

     	package com.my.rabbitmqstudy.quickstart;
    
    import com.rabbitmq.client.*;
    
    public class Consumer {
    
        public static void main(String[] args) throws Exception{
    
            //1 创建一个 ConnectionFactory
            ConnectionFactory connectionFactory = new ConnectionFactory();
            connectionFactory.setHost("127.0.0.1");
            connectionFactory.setPort(5672);
            connectionFactory.setVirtualHost("/");
    
            //2 通过工厂创建连接
            Connection connection = connectionFactory.newConnection();
    
            //3 通过 Connection创建一个Channel
            Channel channel = connection.createChannel();
    
            //4 声明(创建)一个队列
            String queueName = "test001";
            channel.queueDeclare(queueName,true,false,false,null);
    
            //5 创建消费者
            QueueingConsumer queueingConsumer = new QueueingConsumer(channel);
    
            //6 设置 Channel
            channel.basicConsume(queueName,true,queueName,queueingConsumer);
    
            //7 获取消息
            while (true){
                QueueingConsumer.Delivery delivery = queueingConsumer.nextDelivery();
                String msg = new String(delivery.getBody());
                System.out.println("消费端:" + msg);
                //Envelope envelope = delivery.getEnvelope();
            }
        }
    }
    
    
  • 先运行消费者,接着运行生产者

    消费端:hello RabbitMQ
    消费端:hello RabbitMQ
    消费端:hello RabbitMQ
    消费端:hello RabbitMQ
    消费端:hello RabbitMQ
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值