RabbitMQ安装和使用(三)

[Practice Note] RabibtMQ多种模式实现 今日待更新 阅读详情

之前的博客我们实现了RabbitMQ在Windows系统下的安装和使用,并且通过对队列的使用实现了简单的发送和接收功能。本部分主要介绍RabbitMQ的发布/订阅以及路由设置,主要实现以下功能。

实现步骤:

一:发布/订阅模式理论知识

1、转发器(Exchanges)

RabbitMQ消息模型的核心理念是生产者永远不会直接发送任何消息给队列,一般的情况生产者甚至不知道消息应该发送到哪些队列。相反的,生产者只能发送消息给转发器(Exchange)。转发器是非常简单的,一边接收从生产者发来的消息,另一边把消息推送到队列中。转发器必须清楚的知道消息如何处理它收到的每一条消息。是追加到一个指定的队列、追加到指定队列、或者扔掉,这些规则通过转发器的类型进行定义。

常用转发器及解释:

fanout:生产者发送到exchange的消息会被所有的消费者接受处理。

direct:生产者在发送消息至转换器时,会指定一个路由key,消费者消费的时候也会指定一个路由key,这样你发送的消息指定的是什么routingKey,那么转发器就会把消息转给相应队列对应的消费者进行处理。

topic:比direct类型更加灵活,提供.与*的匹配模式,让路由的绑定key与消费者的选择key更加强大。其中,.号可以匹配一个标识符,*号可以配置0个或多个标识符。

2、匿名转发器(nameless exchange)

前面说到生产者只能发送消息给转发器(Exchange),但是我们前两篇博客中的例子并没有使用到转发器,我们仍然可以发送和接收消息。这是因为我们使用了一个默认的转发器,它的标识符为””。之前发送消息的代码:

channel.BasicPublish("",QUEUE_NAME,MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());

第一个参数为转发器的名称,我们设置为””:如果存在routingKey(第二个参数),消息由routingKey决定发送到哪个队列。

现在我们可以指定消息发送到的转发器:

channel.BasicPublish( Exchange_Name,"", null, message.getBytes());

3、临时队列(Temporary queues)

前面的博客中我们都为队列指定了一个特定的名称。能够为队列命名对我们来说是很关键的,我们需要指定消费者为某个队列。当我们希望在生产者和消费者间共享队列时,为队列命名是很重要的。不过,对于我们很多系统中并不关心队列的名称。我们想要接收到所有的消息,而且我们也只对当前正在传递的数据的感兴趣。为了满足我们的需求,需要做两件事:
第一,无论什么时间连接到RabbitMQ我们都需要一个新的空的队列。我们可以随机创建队列,或者让服务器给我们提供一个随机队列的名称。
第二,一旦消费者与Rabbit断开,消费者所接收的那个队列应该被自动删除。
.Net中我们可以使用QueueDeclare()方法,不传递任何参数,来创建一个非持久的、唯一的、自动删除的队列且队列名称由服务器随机产生。
string queue_Name = channel.QueueDeclare().QueueName;

4、绑定(Bindings)

我们已经创建了一个转发器和队列,我们现在需要通过binding告诉转发器把消息发送给我们的队列。
channel.QueueBind(Queue_Name,Exchange_Name,””)参数1:队列名称 ;参数2:转发器名称。

二:源码实现

1、fanout类型

 Producer源码:

static void Main(string[] args)
        {
            //创建目标,并将目标地址、用户名、密码记录
            var factory = new ConnectionFactory();
            factory.HostName = "xxx.xxx.xxx.xxx";
            factory.UserName = "xxx";
            factory.Password = "xxx";
            //建立实例连接
            var connection = factory.CreateConnection();
            //建立连接RabbitMQ通道
            var channel = connection.CreateModel();
            //声明一个fanout类型的转发器Exchange_send
            channel.ExchangeDeclare("Exchange_send","fanout");
            //声明要发送的数据
            byte[] body = Encoding.UTF8.GetBytes("It's a fanout type!");
            channel.BasicPublish("Exchange_send", "",null,body);
            Console.WriteLine(DateTime.Now.ToString()+":Fanout type send success");
            Console.ReadKey();
        }

Consumer源码:

static void Main(string[] args)
        {
            //创建目标,并将目标地址、用户名、密码记录
            var factory = new ConnectionFactory();
	    factory.HostName = "xxx.xxx.xxx.xxx";
            factory.UserName = "xxx";
            factory.Password = "xxx";
            //建立实例连接 
            var connection = factory.CreateConnection(); 
            //建立连接RabbitMQ通道 
            var channel = connection.CreateModel(); 
            //声明一个fanout类型的转发器Exchange_send 
            channel.ExchangeDeclare("Exchange_send", "fanout"); 
            //创建一个非持久的、唯一的且自动删除的队列 
            string queue_Name = channel.QueueDeclare().QueueName; 
            //将队列绑定到转发器 
            channel.QueueBind(queue_Name, "Exchange_send", ""); 
            //用于接收消息 
            QueueingBasicConsumer consumer = new QueueingBasicConsumer(channel); 
            //指定接收者,第二个参数false表示需要回执给rabbitmq,否则rabbitmq一直保存 
            channel.BasicConsume(queue_Name, false, consumer); 
            while(true) 
            { 
                 //接收消息并处理 
                 var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
                 var body = ea.Body; 
                 var message = Encoding.UTF8.GetString(body); 
                 Console.WriteLine(DateTime.Now.ToString() + ":Received {0}", message); 
                 //消息处理完成后告诉客户端我已收到消息 
                 var body1 = Encoding.UTF8.GetBytes("I have received the message"); 
                 channel.BasicPublish("", "receive", null, body1); 
                 Console.WriteLine(DateTime.Now.ToString() + " send:{0}", "I have received the message"); 
                 //处理完了回执给rabbitmq,如果没有这行代码,RabbitMQ会一直存储这条消息 
                 channel.BasicAck(ea.DeliveryTag, true); 
            } 
            Console.ReadKey();
        }
2、direct类型

Producer源码:

private static String EXCHANGE_NAME = "Exchange_direct";
        private static String[] LOGTYPE = { "warning", "error" };
        static void Main(string[] args)
        {
            //创建目标,并将目标地址、用户名、密码记录
            var factory = new ConnectionFactory();
            factory.HostName = "xxx.xxx.xxx.xxx";
            factory.UserName = "xxx";
            factory.Password = "xxx";
            //建立实例连接 
            var connection = factory.CreateConnection(); 
            //建立连接RabbitMQ通道 
            var channel = connection.CreateModel(); 
            //声明一个direct类型的转发器 
            channel.ExchangeDeclare(EXCHANGE_NAME, "direct"); 
            // 发送5条消息 
            for (int i = 0; i < 5; i++) 
            { 
                 String message = ""; 
                 if (i / 2 == 0) 
                 { 
                      message = LOGTYPE[0] + "_log :it's warning " + i; 
                      // 发布消息至转发器,指定routingkey 
                      channel.BasicPublish(EXCHANGE_NAME, LOGTYPE[0], null, Encoding.UTF8.GetBytes(message)); 
                 } 
                 else 
                 { 
                      message = LOGTYPE[1] + "_log :it's error " + i; 
                      // 发布消息至转发器,指定routingkey 
                      channel.BasicPublish(EXCHANGE_NAME, LOGTYPE[1], null, Encoding.UTF8.GetBytes(message));
                 } 
                 Console.WriteLine("I have sent '" + message + "'"); 
            } 
            Console.ReadKey(); 
       }

Consumer01源码

        private static String EXCHANGE_NAME = "Exchange_direct";
        private static String[] LOGTYPE = { "warning", "error" };
        static void Main(string[] args)
        {
            //创建目标,并将目标地址、用户名、密码记录
            var factory = new ConnectionFactory();
            factory.HostName = "xxx.xxx.xxx.xxx";
            factory.UserName = "xxx";
            factory.Password = "xxx";
            //建立实例连接 
            var connection = factory.CreateConnection(); 
            //建立连接RabbitMQ通道 
            var channel = connection.CreateModel(); 
            //声明一个fanout类型的转发器Exchange_send 
            channel.ExchangeDeclare(EXCHANGE_NAME, "direct"); 
            //创建一个非持久的、唯一的且自动删除的队列 
            string queue_Name = channel.QueueDeclare().QueueName; 
            //将队列绑定到转发器 
            channel.QueueBind(queue_Name, EXCHANGE_NAME, LOGTYPE[0]); 
            //用于接收消息 
            QueueingBasicConsumer consumer = new QueueingBasicConsumer(channel); 
            //指定接收者,第二个参数false表示需要回执给rabbitmq,否则rabbitmq一直保存 
            channel.BasicConsume(queue_Name, false, consumer); 
            while(true) 
            { 
                 //接收消息并处理 
                 var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue(); 
                 var body = ea.Body; var message = Encoding.UTF8.GetString(body); 
                 Console.WriteLine(DateTime.Now.ToString() + ":Received {0}", message); 
                 //消息处理完成后告诉客户端我已收到消息 
                 var body1 = Encoding.UTF8.GetBytes("I have received the message"); 
                 channel.BasicPublish("", "receive", null, body1);
                 Console.WriteLine(DateTime.Now.ToString() + " send:{0}", "I have received the message"); 
                 //处理完了回执给rabbitmq,如果没有这行代码,RabbitMQ会一直存储这条消息 
                 channel.BasicAck(ea.DeliveryTag, true); 
            } 
            Console.ReadKey(); 
       }
Consumer02源码:

        private static String EXCHANGE_NAME = "Exchange_direct";
        private static String[] LOGTYPE = { "warning", "error" };
        static void Main(string[] args)
        {
            //创建目标,并将目标地址、用户名、密码记录
            var factory = new ConnectionFactory();
            factory.HostName = "xxx.xxx.xxx.xxx";
            factory.UserName = "xxx";
            factory.Password = "xxx";
            //建立实例连接 
            var connection = factory.CreateConnection(); 
            //建立连接RabbitMQ通道 
            var channel = connection.CreateModel(); 
            //声明一个fanout类型的转发器Exchange_send 
            channel.ExchangeDeclare(EXCHANGE_NAME, "direct"); 
            //创建一个非持久的、唯一的且自动删除的队列 
            string queue_Name = channel.QueueDeclare().QueueName; 
            //将队列绑定到转发器 
            channel.QueueBind(queue_Name, EXCHANGE_NAME, LOGTYPE[1]); 
            //用于接收消息 
            QueueingBasicConsumer consumer = new QueueingBasicConsumer(channel); 
            //指定接收者,第二个参数false表示需要回执给rabbitmq,否则rabbitmq一直保存 
            channel.BasicConsume(queue_Name, false, consumer); 
            while(true) 
            { 
                 //接收消息并处理 
                 var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue(); 
                 var body = ea.Body; var message = Encoding.UTF8.GetString(body); 
                 Console.WriteLine(DateTime.Now.ToString() + ":Received {0}", message); 
                 //消息处理完成后告诉客户端我已收到消息 
                 var body1 = Encoding.UTF8.GetBytes("I have received the message"); 
                 channel.BasicPublish("", "receive", null, body1);
                 Console.WriteLine(DateTime.Now.ToString() + " send:{0}", "I have received the message"); 
                 //处理完了回执给rabbitmq,如果没有这行代码,RabbitMQ会一直存储这条消息 
                 channel.BasicAck(ea.DeliveryTag, true); 
            } 
            Console.ReadKey(); 
       }
3、topic类型

Producer源码:

private static String EXCHANGE_NAME = "Exchange_topic";
        static void Main(string[] args)
        {
            //创建目标,并将目标地址、用户名、密码记录
            var factory = new ConnectionFactory();
            factory.HostName = "xxx.xxx.xxx.xxx";
            factory.UserName = "xxx";
            factory.Password = "xxx";
            //建立实例连接
            var connection = factory.CreateConnection();
            //建立连接RabbitMQ通道
            var channel = connection.CreateModel();
            //声明一个direct类型的转发器
            channel.ExchangeDeclare(EXCHANGE_NAME, "topic");
            String[] LOGTYPE = new String[] { "kernal.info", "cron.warning", "auth.info", "kernel.critical" };
            // 发送5条消息
            for (int i = 0; i < 4; i++)
            {
                string message = LOGTYPE[i] + ":it's " + i;
                // 发布消息至转发器,指定routingkey
                channel.BasicPublish(EXCHANGE_NAME, LOGTYPE[i], null, Encoding.UTF8.GetBytes(message));
                Console.WriteLine("I have sent '" + message + "'");
            }
            Console.ReadKey();
        }

Consumer源码:

private static String EXCHANGE_NAME = "Exchange_topic";
        static void Main(string[] args)
        {
            //创建目标,并将目标地址、用户名、密码记录
            var factory = new ConnectionFactory();
            factory.HostName = "xxx.xxx.xxx.xxx";
            factory.UserName = "xxx";
            factory.Password = "xxx";
            //建立实例连接
            var connection = factory.CreateConnection();
            //建立连接RabbitMQ通道
            var channel = connection.CreateModel();
            //声明一个fanout类型的转发器Exchange_send
            channel.ExchangeDeclare(EXCHANGE_NAME, "topic");
            //创建一个非持久的、唯一的且自动删除的队列
            string queue_Name = channel.QueueDeclare().QueueName;
            //将队列绑定到转发器
            channel.QueueBind(queue_Name, EXCHANGE_NAME, "cron.*");
            //用于接收消息
            QueueingBasicConsumer consumer = new QueueingBasicConsumer(channel);
            //指定接收者,第二个参数false表示需要回执给rabbitmq,否则rabbitmq一直保存
            channel.BasicConsume(queue_Name, false, consumer);
            while(true)
            {
                //接收消息并处理
                var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
                var body = ea.Body;
                var message = Encoding.UTF8.GetString(body);
                Console.WriteLine(DateTime.Now.ToString() + ":Received {0}", message);
                //消息处理完成后告诉客户端我已收到消息
                var body1 = Encoding.UTF8.GetBytes("I have received the message");
                channel.BasicPublish("", "receive", null, body1);
                Console.WriteLine(DateTime.Now.ToString() + " send:{0}", "I have received the message");
                //处理完了回执给rabbitmq,如果没有这行代码,RabbitMQ会一直存储这条消息
                channel.BasicAck(ea.DeliveryTag, true);
            }
            Console.ReadKey();
        }

不同Consumer接收不同消息,只需要改QueueBind的第三个参数即可。












        
(三)RabbitMQ消息队列-Centos7下安装RabbitMQ3.6.1 如果你看过前两章对RabbitMQ已经有了一定了解,现在已经摩拳擦掌,来吧动手吧!用什么系统本文使用的是Centos7,为了保证对linux不太熟悉的伙伴也能轻松上手(避免折在安装的路上),下面是我的系统镜像地址:https://pan.baidu.com/s/1gfl6Y9l 养成良好的习惯,安装好系统运行更新:yum update -yreboot //一般情况不用重启,个人习惯。有人问如 阅读详情

相关推荐

RabbitMQ.ManagedConsumerExample:RabbitMQ 的 QueueingBasicConsumer 的示例实现

RabbitMQ ManagedConsumer 示例 该项目演示了一种模式,用于委派自定义消息使用者以使用 RabbitMQ 处理消息传递。 要求 您需要运行 RabbitMQ 才能使本示例正常工作。 创建一个名为“MyExchange”的交换,并确保密码为“guest”的默认“guest”帐户存在,并且具有创建和绑定队列到交换的权限。

RabbitMQ消息队列的使用

我们知道RabbitMQ的Exchange常用交换器类型分为fanout、direct、topic、headers 4种类型,这里我们将对fanout、direct、topic 3种类型以实际代码的形式进行讲解,至于关于交换器对各类型的具体讲解,请参照文章开始给出的链接进行了解,这里就不再赘述,我们新建了如下图的解决方案: 1、RabbitMQHelper 帮助类,对常用的消息入队以及消费消...

u013938578的博客 716

ENSP从下载到运行:用虚拟机搭建华为认证实验环境全流程(含USG6000V镜像配置)

本文提供了一份详细的华为ENSP仿真平台从下载、安装到配置USG6000V防火墙镜像的完整指南。内容涵盖前置软件安装、ENSP主程序配置、核心设备镜像导入及虚拟机资源分配策略,旨在帮助网络工程师和学习者快速搭建一个稳定、功能齐全的华为认证实验环境,为备考和模拟企业网络部署打下坚实基础。

weixin_29230865的博客 533

在C#中使用消息队列RabbitMQ

参考文章:http://www.cnblogs.com/qy1141/p/4054135.html 开发环境&工具: VS2017 RabbitMqErlang运行环境 先安装Erlang运行环境然后再安装RabbitMq 安装和配置就不说了 默认安装路径:C:\Program Files\RabbitMQ Server,在rabbitmq_server-3.6.11\sbin文...

weixin_30938149的博客 842

从零构建边缘AI数据管道:K230+ESP8266的物联网实践指南

本文详细介绍了如何利用K230开发板和ESP8266模块构建高可靠性的边缘AI数据管道,特别针对智能农业监测场景。通过完整的系统架构设计、AI模型部署、低功耗通信优化和云端集成方案,为开发者提供了一套可落地的物联网实践指南,重点解决了边缘计算环境下的数据传输稳定性和能效管理问题。

j2k3l4的博客 872

SAP PPDS启发式排产实战:从零配置到自定义规则开发(附ABAP代码示例)

本文详细介绍了SAP PPDS启发式排产的实战应用,从基础配置到自定义规则开发的全流程。通过ABAP代码示例,展示了如何实现多目标优化、实时响应和约束可视化,帮助企业提升订单交付率、减少设备闲置时间。文章还包含开发环境准备、标准模板解析、自定义开发步骤及性能优化技巧,适合制造业数字化转型的实践参考。

seed的博客 183

rabbitMQ学习笔记(五) 消息路由

生产者会生产出很多消息 , 但是不同的消费者可能会有不同的需求,只需要接收指定的消息,其他的消息需要被过滤掉。 这时候就可以对消息进行过滤了。 在消费者端设置好需要接收的消息类型。 如果不使用默认的Exchange发送消息,而是使用我们自定定义的Exchange发送消息,那么下面这个方法的第二个参数就不是QueueName了,而是消息的类型。 channel.basicPu

u010029983的专栏 572

关于RTP时间戳以及播放器对时间戳的处理

首先,了解时间戳几个基本概念: 时间戳单位:时间戳计算的单位不是秒之类的单位,而是由采样频率所代替的单位,这样做的目的就是为了是时间戳单位更为精准。比如说一个音频的采样频率为8000Hz,那么我们可以把时间戳单位设为1 / 8000。 时间戳增量:相邻两帧之间的时间差(以时间戳单位为基准)。 采样频率: 有些地方也叫时钟频率,即 每秒钟抽取样本的次数,例如音频的采...

toshiba689的专栏 3052

RabbitMQ .NET消息队列使用入门(四)【RabbitMQ用法大全】

一.Hello World 生产者 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using RabbitMQ.Client; using RabbitMQ.Client.Framing.Impl; namespace ...

极客神殿 1710

Abaqus 2023 保姆级安装避坑指南:从环境变量到许可证配置,一次搞定

本文提供Abaqus 2023的详细安装指南,涵盖环境变量设置、许可证配置等关键步骤,帮助用户避开常见安装陷阱。通过系统环境检查、目录结构规划、许可证服务器安装及Java环境配置等实用技巧,确保顺利完成安装并优化软件性能。

weixin_42524276的博客 425

医疗AI知识库更新慢?提示工程架构师用Agentic AI自动更新的策略

我们的目标是用Agentic AI替代传统更新流程中的“重复劳动”,让医疗知识库(以知识图谱为例)能自动跟踪最新医学进展,把“更新周期从数月缩短到数天”。从PubMed/指南数据库自动抓取新文献;用提示工程从文本中提取结构化医学知识;自动校验新知识与旧知识的冲突;将通过校验的知识写入知识图谱。拆问题:先讲医疗知识库更新慢的3大根源;给方案:用Agentic AI设计4个“小助手”解决问题;讲原理:每个小助手的工作逻辑+提示工程技巧;做实战。

AI 原生应用开发的博客 1061

RabbitMQ篇三 windows环境安装RabbitMQ

otp_win64_22.0.exe rabbitmq-server-windows-3.8.3.zip 百度网盘下载 一,安装ERL 1、安装 2、安装 一直next就可以,不再描述 3、配置环境变量 安装完成之后创建一个名为ERLANG_HOME的环境变量,其值指向erlang的安装目录。 同将%ERLANG_HOME%\bin加入到Path中4、 验证 在cmd命令下输入:erl 能够返回版本号则表示安装与配置环境变量成功 二、RabbitMQ 安装 1、将下载下来的 ra...

bluewelkin的专栏 747

制作INCA和CANape通用的A2L

CANape和INCA通用的A2L配置与修改

赞的博客 5961

[rabbitMQ]三、rabbitMQ的php扩展的安装

官网地址:https://www.rabbitmq.com/ 安装扩展的前提是你已经安装了rabbitmq,安装步骤: https://blog.youkuaiyun.com/qq_39545346/article/details/106191397 windows安装 1.下载扩展: http://pecl.php.net/package/amqp/ 选择稳定的、合适的版本,点击下载。 注意:X64 只支持属 64位 CPU 与 系统,而 X86 可以同时支持两种CPU,只是在 X64 CPU上会有性能损失。所以千万

qq_39545346的博客 239

防护装备穿戴检查:基于YOLOv8与UI界面的深度学习应用

通过结合YOLOv8模型与UI界面,本系统实现了防护装备穿戴检查的自动化。该系统能够快速识别工作人员是否正确佩戴了所需的防护装备,帮助提高安全管理水平。未来,随着技术的发展,防护装备穿戴检查系统将在更多领域得到应用,如工业现场、建筑工地等,实现更加精确和高效的实时监控。

YOLO 354

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

RabbitMQ学习记录(三)-RabbitMQ安装

RabbitMQ安装,RabbitMQ 的Docker 安装,Erlang环境安装

崔二旦 2114

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

三、RabbitMQ安装

安装前准备 Linux版本信息: 发行版本:CentOS Linux release 7.5.1804 (Core) 内核版本:Linux version 3.10.0-862.el7.x86_64 所需软件: Erlang版本:erlang-19.3.6.12-2.el7.centos.x86_64.rpm 下载地址 RabbitMQ版本:rabbitmq-server-3.6.16.rc...

weixin_30819163的博客 330

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

RabbitMQ笔记(三)-基于Docker安装RabbitMQ集群

RabbitMQ的镜像选择是rabbitmq:3.6.15-management step1. 依次启动三个RabbitMQ的容器 RABBITMQ_ERLANG_COOKIE是配置erlang.cookie的值 .erlang.cookie是erlang实现分布式的必要文件,erlang分布式的每个节点上要保持相同的.erlang.cookie文件,同时保证文件的权限是400。 具体的文件路径在...

yingziisme的博客 610

RabbitMQ学习总结(三)之linux环境安装rabbitmq

linux安装rabbitmq

a2321123的博客 3386

工作心得(三)——初识RabbitMQ,RabbitMQ的安装和集群配置

最近被公司派去研究新技术,RabbitMQ队列服务,用来替换公司正在使用的Redis队列,至于为什么准备使用RabbitMQ而要弃用redis,这里我就不细说了,网上自己去查查资料吧,萝卜白菜各有所爱。 总之,在一系列的查看资料,查文档,上谷歌求助等等,终于我封装的RabbitMQ框架就要上线生产了(预计11.15日上线,经过三轮测试),我没有使用Spring提供的rabbitmq框架,而是自己

Tomoyolq的专栏 3169

基于docker安装rabbitmq(三)

一、搜索rabbitmq的docker镜像 1.1 粗略查看 docker search rabbitmq 1 1.2 查看tag docker-tags rabbitmq 1 二、拉取rabbitmq的docker镜像 2.1 拉取镜像 do...

weixin_41979002的博客 303

docker学习(三)安装rabbitmq、tomcat8

安装rabbitmq #指定版本,该版本包含了web控制页面 docker pull rabbitmq:management #方式一:默认guest 用户,密码也是 guest docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:management 页面访问 http://localhost:15672/ 安装tomcat docker pull tomcat:8.5.40 d

SpringHASh的博客 1895

linux socat rpm,RabbitMQ系列(三)RabbitMQ Server的安装(基于Linux RPM)

提示:在Fedora和RHEL仓库中包含了RabbitMQ,但这些版本往往是滞后的且不再被支持,我们建议你使用PackageCloud或者Bintray的Yum仓库进行安装;RabbitMQ RPM包将需要sudo特权来安装和管理。在没有sudo的环境中,可以考虑使用通用的二进制构建;安装RabbitMQ的方式使用PackageCloud或者Bintray的Yum仓库中的安装包进行安装(该选项强烈...

weixin_34908663的博客 530

RabbitMQ学习之(三)_Centos6下RabbitMQ PHP扩展的安装

安装rabbitmq-c依赖包 yum install libtool autoconf 下载安装rabbitmq-c wget https://github.com/alanxz/rabbitmq-c/releases/download/v0.5.0/rabbitmq-c-0.5.0.tar.gz tar -zxvf rabbitmq-c-0.5.0.tar.gz cd ...

weixin_30402343的博客 83

MQ消息队列(三)RabbitMQ及Erlang安装过程中常见问题

RabbitMQ安装过程中与Erlang版本不匹配 RabbitMQ和Erlang安装失败的解决方案

weixin_62319133的博客 2239
上一篇: RabbitMQ安装和使用(二)
下一篇: 【Windows10】点击cortana无反应,很多应用图片灰色点击无反应解决方法
wangwtotao
博客等级 码龄17年 7粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值