首页 > 其他分享 >RabbitMQ的基本用法

RabbitMQ的基本用法

时间:2024-05-17 13:43:51浏览次数:14  
标签:基本 交换器 队列 RabbitMQ 用法 消息 var using

RabbitMQ是一个实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。它使用Erlang语言编写,并广泛用于分布式系统、微服务架构、大数据处理等领域。RabbitMQ的基本用法涉及几个核心概念,包括消息(Message)、消息队列(Queue)、交换器(Exchange)、绑定(Binding)和网络连接(Connection)。

以下是RabbitMQ的基本用法概述:

  1. 安装和配置
    • 安装Erlang:RabbitMQ是用Erlang语言编写的,因此在安装RabbitMQ之前需要先安装Erlang。
    • 安装RabbitMQ:根据你所使用的操作系统,下载并安装RabbitMQ服务器。
    • 配置:根据需要进行配置,如设置用户、权限、队列和交换器等。
  2. 消息
    • 消息是RabbitMQ中的基本单位,由消息头和消息体组成。消息体是不透明的,可以包含任何类型的数据。
  3. 消息队列
    • 消息队列是消息的容器,一个消息可以放在一个或多个队列中。消息队列用于存储和转发消息。
    • 你可以创建、删除、查看和管理队列。
  4. 交换器
    • 交换器是RabbitMQ中用于接收生产者发送的消息,并根据一定的规则将消息路由到不同的队列中的组件。
    • RabbitMQ提供了多种类型的交换器,如直连交换器(Direct Exchange)、主题交换器(Topic Exchange)等。
    • 你可以创建、绑定和配置交换器。
  5. 绑定
    • 绑定是交换器和队列之间的关联关系,它定义了消息如何从交换器路由到队列。
    • 通过绑定,你可以指定消息基于特定的路由键(Routing Key)被路由到特定的队列。
  6. 生产者(消息发送者):
    • 生产者负责创建和发送消息到RabbitMQ的交换器。
    • 你需要编写代码来连接RabbitMQ服务器,创建交换器(如果需要),并将消息发送到交换器。
  7. 消费者(消息接收者):
    • 消费者负责从RabbitMQ的队列中获取并处理消息。
    • 你需要编写代码来连接RabbitMQ服务器,声明队列(如果需要),并从队列中获取消息进行处理。
  8. 网络连接
    • RabbitMQ使用TCP连接进行网络通信。你需要确保生产者、消费者和RabbitMQ服务器之间的网络连接是可靠的。

在实际使用中,你可以根据具体的需求和场景来配置和使用RabbitMQ。例如,你可以使用RabbitMQ来实现异步任务处理、解耦系统组件、数据流转媒介和日志收集等功能。同时,RabbitMQ还提供了丰富的配置选项和插件,以满足不同场景下的需求。

在C#中,使用RabbitMQ通常涉及与RabbitMQ的AMQP协议进行交互。这通常通过RabbitMQ的官方C#客户端库RabbitMQ.Client来完成。以下是一个简单的C#示例,展示了如何作为生产者和消费者来使用RabbitMQ。

1. 安装RabbitMQ.Client

首先,你需要在你的C#项目中安装RabbitMQ的客户端库。这可以通过NuGet包管理器来完成。在Visual Studio中,右键点击你的项目 -> 选择 "Manage NuGet Packages..." -> 搜索 "RabbitMQ.Client" -> 点击 "Install"。

2. 生产者(发送消息)

一个简单的生产者示例,它连接到RabbitMQ服务器,声明一个队列,并发送一条消息。

using RabbitMQ.Client;  
using RabbitMQ.Client.Events;  
using System;  
using System.Text;  
  
class Producer  
{  
    public static void Main()  
    {  
        var factory = new ConnectionFactory() { HostName = "localhost" }; // 替换为你的RabbitMQ服务器地址  
        using (var connection = factory.CreateConnection())  
        using (var channel = connection.CreateModel())  
        {  
            channel.QueueDeclare(queue: "hello",  
                                 durable: false,  
                                 exclusive: false,  
                                 autoDelete: false,  
                                 arguments: null);  
  
            string message = "Hello World!";  
            var body = Encoding.UTF8.GetBytes(message);  
  
            channel.BasicPublish(exchange: "",  
                                 routingKey: "hello",  
                                 basicProperties: null,  
                                 body: body);  
            Console.WriteLine(" [x] Sent '{0}'", message);  
        }  
  
        Console.WriteLine(" Press [enter] to exit.");  
        Console.ReadLine();  
    }  
}

3. 消费者(接收消息)

简单的消费者示例,它连接到RabbitMQ服务器,声明一个队列,并等待接收消息。

using RabbitMQ.Client;  
using RabbitMQ.Client.Events;  
using System;  
using System.Text;  
  
class Consumer  
{  
    public static void Main()  
    {  
        var factory = new ConnectionFactory() { HostName = "localhost" }; // 替换为你的RabbitMQ服务器地址  
        using (var connection = factory.CreateConnection())  
        using (var channel = connection.CreateModel())  
        {  
            channel.QueueDeclare(queue: "hello",  
                                 durable: false,  
                                 exclusive: false,  
                                 autoDelete: false,  
                                 arguments: null);  
  
            var consumer = new EventingBasicConsumer(channel);  
            consumer.Received += (model, ea) =>  
            {  
                var body = ea.Body.ToArray();  
                var message = Encoding.UTF8.GetString(body);  
                Console.WriteLine(" [x] Received '{0}'", message);  
            };  
            channel.BasicConsume(queue: "hello",  
                                 autoAck: true,  
                                 consumer: consumer);  
  
            Console.WriteLine(" Press [enter] to exit.");  
            Console.ReadLine();  
        }  
    }  
}

 

注意事项:

  • 在上述示例中,我们使用了默认的guest用户来连接RabbitMQ服务器。在生产环境中,你应该使用具有适当权限的专用用户。
  • HostName 属性应该设置为你的RabbitMQ服务器地址。如果RabbitMQ服务运行在你的本地机器上,你可以使用 "localhost"。
  • 在消费者示例中,我们设置了 autoAck: true,这意味着一旦消息被接收,它就会自动从队列中删除。如果你希望手动控制消息的确认,可以将 autoAck 设置为 false 并在处理完消息后调用 channel.BasicAck 方法来确认消息。
  • 队列的声明是幂等的,这意味着即使队列已经存在,声明操作也不会产生任何影响。因此,在生产者和消费者中都可以安全地声明队列。

标签:基本,交换器,队列,RabbitMQ,用法,消息,var,using
From: https://www.cnblogs.com/forges/p/18197635

相关文章

  • Emacs基本操作
    Emacs常用命令0.寻求帮助1)C-h:寻求帮助,在输入C-h后,输入需要了解的按键,即会弹出对应按键的功能说明。2)C-g:中止操作,例如在意欲输入C-xk过程中,突然想放弃,但已经输入了C-x,想放弃执行,此时按C-g即可中断操作。3)C-xC-c:退出emacs。1.文件操作1)C-xC-f:打开文件2)C-xC-s:保存3)C-x......
  • git用法
    老铁,这年头不会点Git真不行!!! 版本控制说到版本控制,脑海里总会浮现大学毕业是写毕业论文的场景,你电脑上的毕业论文一定出现过这番景象!1234567891011毕业论文_初稿.doc毕业论文_修改1.doc毕业论文_修改2.doc毕业论文_修改3.doc毕业论文_完整版1.doc......
  • Docker 部署RabbitMQ
    1、启动容器dockerrun--name=rabbitmq\-eRABBITMQ_DEFAULT_VHOST=/dev\-eRABBITMQ_DEFAULT_USER=rabbitmq\-eRABBITMQ_DEFAULT_PASS=kun_rabbitmq\-p5672:5672\-p15672:15672\--priv......
  • 流水线 YAML 高级用法来了!大幅降低重复代码、灵活编排多任务
    作者:木烟在YAML化配置流水线时,你是否会遇到以下问题?单流水线中批量执行类似任务场景时,YAML中需要定义多个类似逻辑的Job,Job越多,流水线YAML配置的越长,YAML中的重复代码越多,代码复用性低,可读性差;管理员统一管理多流水线,多应用技术架构和研发流程类似,仅些许构建、部署参......
  • 流水线 YAML 高级用法来了!大幅降低重复代码、灵活编排多任务
    作者:木烟在YAML化配置流水线时,你是否会遇到以下问题?单流水线中批量执行类似任务场景时,YAML中需要定义多个类似逻辑的Job,Job越多,流水线YAML配置的越长,YAML中的重复代码越多,代码复用性低,可读性差;管理员统一管理多流水线,多应用技术架构和研发流程类似,仅些许构建、部署参......
  • Community Mvvm Toolkit常用组件的基本使用(第一版)
    一、组件ObservableObjectObservableObject实现了INotifyPropertyChanged和INotifyPropertyChanging,并触发PropertyChanged和PropertyChanging事件1publicclassUser:ObservableObject2{3privatestringname;45publicstringName6{7......
  • RabbitMQ消息堆积
    根据搜索结果中提供的信息,处理RabbitMQ消息堆积的问题可以采取以下几种策略:增加消费者数量:通过增加消费者的数量来提升消息的处理能力,分担消息消费的负载,缓解消息队列的堆积问题[^5^]。优化消费者的处理逻辑:检查消费者的代码是否存在性能瓶颈或是复杂的处理逻辑。可以通过优......
  • 组播基本概念
    本文分享自天翼云开发者社区《组播基本概念》,作者:zzz概述:组播传输作为IP数据传输的三种方式之一,是指接收者的数量和位置在源端主机不知道的情况下,仅由源发出一份组播报文,向目标组播IP地址发送数据的过程。其特点有:1、组播实现点到多点的高效数据传输。(通常基于UDP)2、组播可以......
  • Mac (Intel) brew 安装 rabbitMQ
    一、安装##rabbitmq依赖erlang环境,先安装erlangbrewinstallerlangbrewinstallrabbitmq##安装主要日志(备份)==>Caveats==>erlangManpagescanbefoundin:/usr/local/opt/erlang/lib/erlang/manAccessthemwith`erl-man`,oraddthisdirectoryto......
  • 大漠注册用法
    先去官方下载必要的文件官网:http://121.204.253.175:8088/login.asp有的鸡肋,要充钱才可以有下载列表。。。因为我没充钱,就去淘宝买了=.=下载这四个,然后解压解压后有这三个文件夹然后桌面新建一个文件夹,存放e项目程序(也可以去别的地方)把这三个拖入到e程序的文件夹中把......