RabbitMQ篇——一篇文章带你入门RabbitMQ,了解RabbitMQ的角色分类权限、AMQP协议以及设计第一个RabbitMQ程序!

这篇具有很好参考价值的文章主要介绍了RabbitMQ篇——一篇文章带你入门RabbitMQ,了解RabbitMQ的角色分类权限、AMQP协议以及设计第一个RabbitMQ程序!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

认识RabbitMQ

RabbitMQ是一个开源的消息代理和消息队列系统,采用AMQP(Advanced Message Queuing Protocol)协议。它被设计用于在分布式系统中进行高效,可靠和可扩展的消息传递。

RabbitMQ基本概念:

  1. Producer(生产者):生产者负责发布消息到消息队列中。
  2. Consumer(消费者):消费者从消息队列中订阅(消费)消息并进行处理。
  3. Message Queue(消息队列):消息队列是一个缓冲区,用于存储待处理的消息。
  4. Exchange(交换机):交换机负责接收生产者发布的消息,并将其路由到一个或多个消息队列。
  5. Binding(绑定):绑定是交换机和消息队列之间的关联关系,它定义了消息如何从交换机路由到消息队列。
  6. Routing Key(路由键):路由键是用于路由消息的属性,它与绑定关系一起决定了消息的路由路径。

RabbitMQ使用场景:

  1. 异步任务处理:将耗时较长的任务放入消息队列中,让消费者异步处理。这可以提高系统的可伸缩性和可靠性。
  2. 解耦系统组件:通过将系统不同组件之间的通信转变为消息队列的方式,可以降低系统的耦合度,使得系统更加灵活和可扩展。
  3. 消息分发:通过交换机和路由键的路由规则,将消息分发给不同的队列。不同的消费者可以根据自己的需要选择订阅感兴趣的消息。
  4. 日志记录:将日志消息发送到消息队列中,可以实现集中式的日志记录和处理。
  5. 实时数据处理:通过使用消息队列来传输实时数据,可以实现实时数据的处理和分析。

RabbitMQ角色分类和权限

RabbitMQ篇——一篇文章带你入门RabbitMQ,了解RabbitMQ的角色分类权限、AMQP协议以及设计第一个RabbitMQ程序!,RabbitMQ,rabbitmq,分布式

RabbitMQ篇——一篇文章带你入门RabbitMQ,了解RabbitMQ的角色分类权限、AMQP协议以及设计第一个RabbitMQ程序!,RabbitMQ,rabbitmq,分布式

Docker安装RabbitMQ

1、下载镜像

docker pull rabbitmq:3.8-management

2、创建并启动容器

docker run -di --name myRabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:3.8-management

RabbitMQ篇——一篇文章带你入门RabbitMQ,了解RabbitMQ的角色分类权限、AMQP协议以及设计第一个RabbitMQ程序!,RabbitMQ,rabbitmq,分布式

3、启动容器

docker start 5d7108ebc294

4、测试访问Rabbitmq的可视化界面
浏览器输入服务器http://120.53.9.55:15672,输入我们上面设置好的账号和密码就能成功访问

RabbitMQ篇——一篇文章带你入门RabbitMQ,了解RabbitMQ的角色分类权限、AMQP协议以及设计第一个RabbitMQ程序!,RabbitMQ,rabbitmq,分布式

RabbitMQ篇——一篇文章带你入门RabbitMQ,了解RabbitMQ的角色分类权限、AMQP协议以及设计第一个RabbitMQ程序!,RabbitMQ,rabbitmq,分布式

AMQP

一、什么是AMQP
高级消息队列协议。是应用层协议的一个开发标准,为面向消息的中间件而设计

二、了解AMQP生产者流转过程
Broker就相当于一个Rabbitmq服务节点
RabbitMQ篇——一篇文章带你入门RabbitMQ,了解RabbitMQ的角色分类权限、AMQP协议以及设计第一个RabbitMQ程序!,RabbitMQ,rabbitmq,分布式

三、了解AMQP消费者流转过程

RabbitMQ篇——一篇文章带你入门RabbitMQ,了解RabbitMQ的角色分类权限、AMQP协议以及设计第一个RabbitMQ程序!,RabbitMQ,rabbitmq,分布式

RabbitMQ组件和架构

一、RabbitMQ核心组成部分
RabbitMQ篇——一篇文章带你入门RabbitMQ,了解RabbitMQ的角色分类权限、AMQP协议以及设计第一个RabbitMQ程序!,RabbitMQ,rabbitmq,分布式

核心概念

RabbitMQ篇——一篇文章带你入门RabbitMQ,了解RabbitMQ的角色分类权限、AMQP协议以及设计第一个RabbitMQ程序!,RabbitMQ,rabbitmq,分布式

二、RabbitMQ的运转流程

RabbitMQ篇——一篇文章带你入门RabbitMQ,了解RabbitMQ的角色分类权限、AMQP协议以及设计第一个RabbitMQ程序!,RabbitMQ,rabbitmq,分布式

第一个RabbitMQ程序

实现步骤:
RabbitMQ篇——一篇文章带你入门RabbitMQ,了解RabbitMQ的角色分类权限、AMQP协议以及设计第一个RabbitMQ程序!,RabbitMQ,rabbitmq,分布式


1、新建一个maven

2、导入依赖

<!--RabbitMQ原生依赖-->
    <dependency>
        <groupId>com.rabbitmq</groupId>
        <artifactId>amqp-client</artifactId>
        <version>5.10.0</version>
    </dependency>

3、编写消息生产者(步骤很重要!)

package com.guohui.rabbitmq.simple;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

//消息生产者
public class Producer {

    public static void main(String[] args) {
        //1、创建连接工程
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("120.53.9.55");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("admin");
        connectionFactory.setVirtualHost("/");

        //2、创建连接Connection
        Connection connection = null;
        Channel channel = null;
        try {
            //创建连接Connection
            connection = connectionFactory.newConnection("生产者");

            //3、通过连接获取通道Channel
            channel = connection.createChannel();

            //4、通过通道创建交换机,声明队列,绑定关系,路由key,实现发送消息和接收消息
            String queueName = "queue1";
            //声明队列的方法
            /*参数解释
            * @Params1 队列的名称
            * @Params2 是否要持久化数据,true为开启持久化
            * @Params3 排他性,是否独占队列
            * @Params4 是否自动删除,随着最后一个消费者消费完毕消息后,是否把队列自动删除
            * @Params5 携带的附属参数*/
            channel.queueDeclare(queueName,false,false,false,null);

            //5、准备消息内容
            String message = "HelloWorld";

            //6、发送消息给队列queue
            注意:第一个空的地方是交换机,现在初学就默认空了!虽然我们没有指定交换机,但是存在默认的交换机!所有的消息都是通过交换机进入到队列中的
            channel.basicPublish("",queueName,null,message.getBytes());
            System.out.println("消息发送成功!");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        } finally {
            //7、关闭通道
            if (channel != null && channel.isOpen()){
                try {
                    channel.close();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (TimeoutException e) {
                    e.printStackTrace();
                }
            }

            //8、关闭连接
            if (connection != null && connection.isOpen()){
                try {
                    connection.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

4、编写消息消费者(步骤很重要!)

package com.guohui.rabbitmq.simple;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

//消息消费者
public class Consumer {
    public static void main(String[] args) {
        //1、创建连接工程
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("120.53.9.55");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("admin");
        connectionFactory.setVirtualHost("/");

        //2、创建连接Connection
        Connection connection = null;
        Channel channel = null;
        try {
            //创建连接Connection
            connection = connectionFactory.newConnection("消费者");

            //3、通过连接获取通道Channel
            channel = connection.createChannel();

            //4、通过通道创建交换机,声明队列,绑定关系,路由key,实现发送消息和接收消息
            String queueName = "queue1";
            //声明队列的方法
            /*参数解释
             * @Params1 队列的名称
             * @Params2 是否要持久化数据,true为开启持久化
             * @Params3 排他性,是否独占队列
             * @Params4 是否自动删除,随着最后一个消费者消费完毕消息后,是否把队列自动删除
             * @Params5 携带的附属参数*/
            channel.queueDeclare(queueName,false,false,false,null);

            //5、准备消息内容
            final String message = "HelloWorld";

            //6、从队列queue1中接收消息
            channel.basicConsume("queue1", true, new DeliverCallback() {
                public void handle(String s, Delivery delivery) throws IOException {
                    System.out.println("收到消息是" + new String(delivery.getBody(), "UTF-8"));
                }
            }, new CancelCallback() {
                public void handle(String s) throws IOException {
                    System.out.println("消息接收失败了...");
                }
            });
            System.out.println("开始接收消息");
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        } finally {
            //7、关闭通道
            if (channel != null && channel.isOpen()){
                try {
                    channel.close();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (TimeoutException e) {
                    e.printStackTrace();
                }
            }

            //8、关闭连接
            if (connection != null && connection.isOpen()){
                try {
                    connection.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

5、访问服务器120.53.9.55:15672,观察消息的生产和消费
(1)首先先执行生产者的代码,发现在通道中有一条消息等待消费

RabbitMQ篇——一篇文章带你入门RabbitMQ,了解RabbitMQ的角色分类权限、AMQP协议以及设计第一个RabbitMQ程序!,RabbitMQ,rabbitmq,分布式

(2)运行消费者代码
发现接收到了生产的消息

RabbitMQ篇——一篇文章带你入门RabbitMQ,了解RabbitMQ的角色分类权限、AMQP协议以及设计第一个RabbitMQ程序!,RabbitMQ,rabbitmq,分布式

并且通道中中待消费的数据变成了0

RabbitMQ篇——一篇文章带你入门RabbitMQ,了解RabbitMQ的角色分类权限、AMQP协议以及设计第一个RabbitMQ程序!,RabbitMQ,rabbitmq,分布式

至此,你已经掌握了RabbitMQ的基础知识,后面的支持的消息模式以及如何解决分布式架构中出现的问题都是相当重要的部分,希望大家能够继续关注!文章来源地址https://www.toymoban.com/news/detail-792402.html

到了这里,关于RabbitMQ篇——一篇文章带你入门RabbitMQ,了解RabbitMQ的角色分类权限、AMQP协议以及设计第一个RabbitMQ程序!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一篇文章带你详细了解axios的封装

    对请求的封装在实际项目中是十分必要的,它可以让我们统一处理 http 请求。比如做一些拦截,处理一些错误等。本篇文章将详细介绍如何封装 axios 请求,具体实现的功能如下 基本配置 配置默认请求地址,超时等 请求拦截 拦截 request 请求,处理一些发送请求之前做的处理,譬如给

    2024年02月07日
    浏览(51)
  • 【C++】一篇文章带你深入了解string

    C语言中,字符串是以’\\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。 string的文档介绍 字符串是表示字符序列的类

    2024年04月08日
    浏览(43)
  • 【C++】一篇文章带你深入了解list

    list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。 list与forward_list非常相似:最主要的不同在

    2024年04月23日
    浏览(46)
  • 一篇文章带你了解-selenium工作原理详解

    前言 Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。 主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得

    2024年02月10日
    浏览(43)
  • 一篇文章带你了解 什么是u(ustd)带你了解他的前世今生

    在数字货币的繁荣世界中,USDT无疑是其中一位重要的角色。它的前世今生,是一个从无到有,从小到大,经历了种种波折和争议的故事。 2014年11月下旬,一个名为Realcoin的注册地为马恩岛和香港的公司决定改变自己的名字,取名为Tether。这个决定预示着一种新的数字货币即将

    2024年01月23日
    浏览(39)
  • 【网络安全】一篇文章带你了解CTF那些事儿

    CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。已经成为全球范围网络安全圈流行的竞赛形式,2013年全

    2024年02月08日
    浏览(49)
  • WAF是什么?一篇文章带你全面了解WAF

    Web应用程序防火墙(Web Application Firewall,WAF)是一种用于保护Web应用程序的安全设备。Web应用程序是指通过Web浏览器或其他Web客户端访问的应用程序。WAF的目的是保护Web应用程序免受黑客、网络攻击和数据泄漏等安全威胁的攻击。 在这篇文章中,我们将深入探讨WAF的工作原理

    2024年02月10日
    浏览(37)
  • 一篇文章带你入门HBase

    本文已收录至Github,推荐阅读 👉 Java随想录 微信公众号:Java随想录 目录 HBase特性 Hadoop的限制 基本概念 NameSpace Table RowKey Column TimeStamp Cell 存储结构 HBase 数据访问形式 架构体系 HBase组件 HBase读写流程 读流程 写流程 MemStore Flush 参数说明 StoreFile Compaction 参数说明 触发过程

    2024年02月08日
    浏览(51)
  • 一篇文章带你了解抖音来客功能的使用方法和注意事项

    抖音是近年来备受欢迎的社交媒体平台之一,其中的“来客”功能更是让许多人喜爱。那么什么是抖音来客呢?抖音来客是指在直播过程中,可以邀请其他抖音用户进行互动和参与,从而增加直播的热度和粉丝数量。下面不若与众科技就来介绍一下抖音来客的具体使用方法和

    2024年02月08日
    浏览(45)
  • 【云原生】什么是云原生?如何学习云原生?一篇文章带你了解云原生

    云原生,相信这个名词大家并不陌生;云原生在近期可谓是爆火,伴随云计算的滚滚浪潮,云原生(CloudNative)的概念应运而生,云原生很火,火得一塌糊涂。可是现在很多人还是不知道什么是云原生,所以今天我们就来聊一聊近期很火的这个名词:云原生吧 。 大家平时经常提

    2024年02月02日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包