当前位置: 首页 > news >正文

汕头网站制作服务商网站服务器空间选择

汕头网站制作服务商,网站服务器空间选择,新闻静态网站模板下载,韶关网站建设墨子#x1f468;#x1f3fb;‍#x1f4bb; 热爱摄影的程序员 #x1f468;#x1f3fb;‍#x1f3a8; 喜欢编码的设计师 #x1f9d5;#x1f3fb; 擅长设计的剪辑师 #x1f9d1;#x1f3fb;‍#x1f3eb; 一位高冷无情的编码爱好者 大家好#xff0c;我是 DevO… ‍ 热爱摄影的程序员 ‍ 喜欢编码的设计师 擅长设计的剪辑师 ‍ 一位高冷无情的编码爱好者 大家好我是 DevOps 工程师 欢迎分享 / 收藏 / 赞 / 在看 这篇 RabbitMQ 教程为学习者提供了全面的内容从 RabbitMQ 的简介开始涵盖了消息中间件的概念、RabbitMQ 的安装与使用以及交换机、队列、路由键等相关概念的介绍。进一步深入教程探讨了 AMQP 协议、客户端开发向导以及消息的发送和消费方式。同时学习者还可以了解消息传输保障、高级特性如死信队列、延迟队列、优先级队列、RPC 实现等。此外教程还涵盖了 RabbitMQ 的管理、配置、运维、监控和集群管理等重要主题帮助学习者充分掌握 RabbitMQ 的应用。整篇教程丰富内容详实适合初学者和有经验的开发者参考学习。 全篇共 11 章9 万余字。本文第2章 RabbitMQ 入门。 第2章 RabbitMQ 入门 2.1 相关概念介绍 在本节中我们将介绍与 RabbitMQ 相关的一些重要概念这些概念对于理解 RabbitMQ 的工作原理非常重要。 2.1.1 生产者和消费者 在 RabbitMQ 中生产者和消费者是两个关键的角色它们协同工作来实现消息的发布和消费。 生产者Producer 生产者是消息的发送者负责向 RabbitMQ 发送消息。生产者将消息发布到交换机Exchange交换机再根据消息的路由键Routing Key将消息路由到一个或多个队列Queue。生产者不需要知道消息最终将被哪个消费者接收它只关心将消息发送到正确的交换机并指定合适的路由键。 在发送消息之前生产者需要和 RabbitMQ 建立连接并创建一个通道Channel来进行消息的发布。通道是在连接上打开的一个轻量级的会话通过通道可以避免频繁地打开和关闭连接从而提高消息的传输效率。 通常生产者会向一个特定的交换机发送消息交换机根据一定的规则将消息路由到队列中然后消费者从队列中接收消息进行处理。生产者可以根据业务需求决定消息的发送频率和内容。 示例代码使用 Python 的 pika 库 import pika# 建立连接 connection pika.BlockingConnection(pika.ConnectionParameters(localhost)) channel connection.channel()# 声明一个名为hello的队列 channel.queue_declare(queuehello)# 发送消息 channel.basic_publish(exchange,routing_keyhello,bodyHello, RabbitMQ!)print( [x] Sent Hello, RabbitMQ!)# 关闭连接 connection.close() 消费者Consumer 消费者是消息的接收者负责从队列中获取消息并进行处理。消费者需要与 RabbitMQ 建立连接并订阅Consume一个或多个队列来接收消息。 一旦消息被发送到队列中消费者就可以从队列中获取消息并对消息进行处理。处理方式可以是执行一段代码、存储到数据库、发送到其他系统等这取决于消费者的业务逻辑。 消费者在接收消息后通常会给 RabbitMQ 发送一个确认Ack信号告知 RabbitMQ 消息已经被成功处理RabbitMQ 可以删除该消息。这样可以确保消息不会丢失并保证消息传递的可靠性。 示例代码使用 Python 的 pika 库 import pikadef callback(ch, method, properties, body):print( [x] Received %r % body)# 消息处理逻辑例如保存到数据库或执行其他操作ch.basic_ack(delivery_tagmethod.delivery_tag)# 建立连接 connection pika.BlockingConnection(pika.ConnectionParameters(localhost)) channel connection.channel()# 声明一个名为hello的队列 channel.queue_declare(queuehello)# 告诉RabbitMQ当收到消息后调用callback函数进行处理 channel.basic_consume(queuehello, on_message_callbackcallback)print( [*] Waiting for messages. To exit press CTRLC) channel.start_consuming() 生产者和消费者的协作使得 RabbitMQ 能够在分布式系统中高效地传递消息实现了解耦和异步处理提高了系统的可扩展性和可靠性。 2.1.2 队列 在 RabbitMQ 中队列Queue是消息的存储和传递单元是 RabbitMQ 的核心组件之一。队列是一个有名字的管道用于保存消息生产者通过交换机Exchange将消息发送到队列消费者则从队列中接收和处理消息。 以下是 RabbitMQ 队列的一些关键特性和介绍 有名字每个队列在 RabbitMQ 中都有一个唯一的名称生产者和消费者通过名称来访问和使用队列。持久性队列可以被声明为持久化的这意味着在 RabbitMQ 服务器重启后队列依然存在其中的消息也不会丢失。持久化可以确保消息的可靠传递。非持久性如果队列被声明为非持久化的在 RabbitMQ 服务器重启后该队列将会被删除其中的消息也会丢失。先进先出队列中的消息按照先进先出FIFO的顺序进行处理即最先进入队列的消息会最先被消费者接收。自动删除队列可以被声明为自动删除的在最后一个消费者断开连接后该队列将会被自动删除用于临时队列的场景。绑定到交换机队列通过绑定到交换机来获取消息。交换机根据一定的规则根据路由键将消息路由到相应的队列。消息确认消费者接收到消息后可以向 RabbitMQ 发送确认信号ACK来告知 RabbitMQ 消息已经被成功处理。如果消费者不发送 ACKRabbitMQ 会认为消息没有被成功处理并将其重新发送给其他消费者或者继续存储在队列中。消息持久性消息也可以被声明为持久化的这样即使 RabbitMQ 服务器重启消息也不会丢失。当消息被发送到持久化的队列中同时消息本身也被声明为持久化时才能保证消息的持久性。 在 RabbitMQ 中队列是一种非常重要的组件它实现了消息传递的核心功能。通过合理的使用队列的特性可以确保消息的可靠传递和处理构建高性能、可靠的消息传递系统。 2.1.3 交换机、路由键、绑定 在 RabbitMQ 中交换机Exchange、路由键Routing Key和绑定Binding是实现消息路由的关键概念。它们一起协同工作将生产者发送的消息从交换机路由到合适的队列中供消费者进行处理。 交换机Exchange 交换机是消息的接收和路由中心它接收生产者发送的消息并根据消息的路由键将消息路由到一个或多个队列。RabbitMQ 支持多种类型的交换机包括直接Direct交换机、扇形Fanout交换机、主题Topic交换机和头部Headers交换机。每种交换机根据不同的路由策略将消息路由到不同的队列。路由键Routing Key 路由键是生产者在发送消息时指定的一个字符串值。生产者通过路由键告诉 RabbitMQ 消息的路由规则。不同类型的交换机使用路由键的方式不同。对于直接交换机路由键与队列的绑定键Binding Key必须完全匹配对于扇形交换机路由键会被忽略消息会被广播到所有绑定到该交换机的队列而对于主题交换机路由键可以使用通配符进行模糊匹配。绑定Binding 绑定是交换机和队列之间的关联关系。在 RabbitMQ 中消费者创建一个绑定将队列绑定到特定的交换机并指定绑定键Binding Key。绑定键的含义取决于交换机的类型。当一个消息发送到交换机时交换机会根据消息的路由键和绑定的绑定键将消息路由到合适的队列。 综合起来消息从生产者发送到交换机交换机根据消息的路由键和绑定的绑定键将消息路由到相应的队列。消费者绑定到队列上从队列中接收和处理消息。 下面是交换机、路由键和绑定之间的关系示意图 Producer -- Message (with Routing Key) -- Exchange -- Binding (with Binding Key) -- Queue -- Consumer 总结 交换机、路由键和绑定是 RabbitMQ 中实现消息路由的核心机制。生产者通过路由键指定消息的路由规则交换机根据路由规则将消息路由到相应的队列中供消费者进行处理。这种灵活的消息路由机制使得 RabbitMQ 能够适应不同的消息传递场景。 2.1.4 交换机类型 RabbitMQ 支持多种类型的交换机Exchange每种类型的交换机根据不同的路由策略将消息路由到绑定到它的队列中。下面介绍 RabbitMQ 中常见的交换机类型 直接交换机Direct Exchange 直接交换机是最简单的交换机类型。它将消息的路由键与队列的绑定键Binding Key进行完全匹配只有当路由键和绑定键完全相同时才将消息路由到对应的队列中。可以理解为一种点对点的消息路由方式。如果消息的路由键没有与任何队列的绑定键匹配那么消息将会被丢弃。直接交换机的路由规则是最严格的。 扇形交换机Fanout Exchange 扇形交换机是一种广播式的交换机。它会将收到的消息广播到所有绑定到它上面的队列忽略消息的路由键。因此使用扇形交换机时无需指定绑定键。适用于需要将消息同时发送给多个消费者的场景。 主题交换机Topic Exchange 主题交换机是一种更加灵活的交换机类型。它将消息的路由键与队列的绑定键进行模糊匹配支持通配符匹配。主题交换机的绑定键可以是一个由点号.分隔的单词列表可以包含两种通配符*表示匹配一个单词#表示匹配零个或多个单词。使用主题交换机时可以根据消息的路由键模式将消息路由到满足条件的队列中。 头部交换机Headers Exchange 头部交换机不使用路由键来路由消息而是使用消息的头部信息进行匹配。它通过消息头部的键值对来决定消息是否路由到队列。头部交换机的匹配规则比较复杂通常较少使用。 根据不同的业务场景和消息路由需求可以选择合适的交换机类型。通过灵活地使用交换机和绑定可以构建出强大的消息传递系统实现消息的精确路由和广播传递。 2.1.5 RabbitMQ 运转流程 了解 RabbitMQ 的运转流程包括生产者发送消息到交换机交换机将消息路由到队列消费者从队列中取出并处理消息。 以下是 RabbitMQ 的基本运转流程 生产者发送消息 生产者Producer创建一个与 RabbitMQ 服务器的连接并打开一个通道Channel。生产者声明一个交换机Exchange并将消息发送给该交换机。生产者需要指定交换机的名称、类型和路由键Routing Key。交换机根据指定的路由键将消息路由到一个或多个队列Queue中。 消费者接收消息 消费者Consumer创建一个与 RabbitMQ 服务器的连接并打开一个通道。消费者声明一个队列并将队列绑定到指定的交换机。消费者需要指定队列的名称、交换机的名称、绑定键Binding Key以及其他可选的参数。消费者通过订阅Consume队列来接收消息。 消息路由和传递 当生产者发送消息时交换机根据消息的路由键和绑定的绑定键将消息路由到相应的队列中。队列中的消息将按照先进先出FIFO的顺序被消费者接收和处理。 消息确认 消费者在接收到消息并处理完成后可以向 RabbitMQ 发送确认信号ACK告知 RabbitMQ 消息已经被成功处理。如果消费者不发送 ACKRabbitMQ 会将消息重新发送给其他消费者或继续存储在队列中。 持久性和高可用性 RabbitMQ 支持队列和消息的持久化确保消息在服务器重启后不会丢失。可以通过设置镜像队列和集群等机制来实现 RabbitMQ 的高可用性。 其他特性 RabbitMQ 还支持消息的过期时间TTL、死信队列、延迟队列、优先级队列等高级特性。 在 RabbitMQ 中一个生产者与 RabbitMQ 建立连接后通常会创建多个 Channel 信道。每个 Channel 是一个独立的会话通道用于进行消息的发送和接收。通过创建多个 Channel生产者可以并行发送多个消息在不同的 Channel 上发送不同的消息或者在同一个 Channel 上发送多条消息从而提高消息的处理效率和吞吐量。 每个连接可以创建多个 Channel而每个 Channel 只属于一个连接。这样的设计可以在一个连接上同时进行多个操作而不需要等待之前的操作完成。同时每个 Channel 之间是相互独立的一个 Channel 的异常不会影响其他 Channel 的正常运行。 生产者与 RabbitMQ 建立的连接可以对应一个或多个 Virtual Host (vhost)。 Virtual Host 是 RabbitMQ 中用于进行逻辑隔离的概念它允许在单个 RabbitMQ 服务器上创建多个独立的逻辑消息环境。每个 Virtual Host 类似于一个独立的消息代理拥有自己的交换机、队列、绑定等资源。这样可以使不同的应用或服务在同一台 RabbitMQ 服务器上运行互相之间不会干扰。 当生产者与 RabbitMQ 建立连接时可以选择连接到指定的 Virtual Host。如果没有指定 Virtual Host默认情况下生产者连接到名为 / 的默认 Virtual Host。然后生产者可以在该 Virtual Host 中进行消息的生产和发送。 在一个 RabbitMQ 服务器上可以配置多个 Virtual Host因此生产者可以建立多个连接并分别连接到不同的 Virtual Host以便将消息发送到不同的逻辑环境中。 消费者与 RabbitMQ 建立连接后消费消息通常是根据队列名称直接与队列进行交互而不是直接与交换机交互。在 RabbitMQ 中生产者将消息发送到交换机然后交换机根据绑定规则将消息路由到相应的队列。消费者需要消费队列中的消息因此它会与特定的队列建立连接并从队列中取出消息进行消费。 消费者通过创建一个或多个 Channel 信道然后通过这些 Channel 与指定的队列建立连接。然后消费者可以通过消费队列的操作来从队列中取出消息并进行处理。 通过与队列直接交互消费者可以按照自己的消费速率从队列中获取消息这样可以更好地控制消息的消费过程避免消息的丢失或堆积。同时队列还可以作为消息的缓冲区帮助消费者处理可能出现的瞬时流量高峰。这样的设计使得消息的消费过程更加灵活和可靠。 总结 RabbitMQ 通过交换机、队列和绑定的灵活组合实现了高效可靠的消息传递。生产者将消息发送到交换机交换机根据消息的路由键将消息路由到队列中然后消费者从队列中接收消息进行处理。通过消息确认机制确保消息的可靠处理。同时RabbitMQ 支持多种高级特性使得消息传递更加灵活和强大。 2.2 AMQP 协议介绍 AMQPAdvanced Message Queuing Protocol高级消息队列协议是一种开放标准的消息传递协议旨在实现跨网络的高性能、高可靠性的消息传递。它提供了一种灵活的消息传递模型适用于各种异步消息传递场景如消息队列、消息中间件和消息路由。 以下是 AMQP 协议的主要特点和介绍 高度可扩展AMQP 协议支持多种交换机和队列类型以及灵活的路由规则可以根据不同的业务需求进行定制和扩展。这使得 AMQP 协议适用于各种规模和复杂度的应用场景。异步消息传递AMQP 协议采用异步消息传递模型生产者和消费者之间不需要直接建立连接而是通过交换机和队列来中转消息。这样可以实现解耦和灵活的消息传递。高可靠性AMQP 协议支持消息的持久化可以确保消息在服务器重启后不会丢失。同时它提供了消息确认机制消费者可以向服务器发送确认信号告知服务器消息已经被成功处理。跨平台支持AMQP 协议是一种开放标准得到了众多厂商和社区的支持。因此它可以在不同的编程语言和操作系统上进行实现实现跨平台的消息传递。安全性AMQP 协议支持身份验证和加密传输可以确保消息在传输过程中的安全性。多种消息传递模式AMQP 协议支持多种消息传递模式包括点对点Point-to-Point和发布-订阅Publish-Subscribe等。这使得它可以适应不同的消息传递需求。灵活的路由规则AMQP 协议支持多种交换机类型可以根据消息的路由键和绑定键将消息路由到相应的队列中。这使得消息传递更加灵活和精确。 AMQP 协议是一种非常强大和通用的消息传递协议它在分布式系统中广泛应用于异步消息传递场景。RabbitMQ 作为 AMQP 协议的实现之一提供了高性能、高可靠性的消息传递服务并支持丰富的特性和灵活的消息传递模型。 2.2.1 AMQP 生产者流转过程 AMQP 生产者Producer流转过程描述了生产者如何将消息发送到 RabbitMQ 服务器的过程。以下是 AMQP 生产者流转过程的详细步骤 建立连接生产者首先与 RabbitMQ 服务器建立一个网络连接。这是通过 TCP/IP 连接到 RabbitMQ 服务器的默认端口5672来实现的。创建通道在建立连接后生产者需要在该连接上创建一个通道Channel。通道是在连接上打开的一个轻量级会话所有的消息传递操作都是在通道上进行的。通道的创建可以通过 AMQP 协议中的 channel.open 命令实现。声明交换机Exchange生产者需要声明一个交换机用于发送消息。交换机是消息的接收和路由中心它根据消息的路由键将消息路由到一个或多个队列。交换机的声明可以通过 AMQP 协议中的 exchange.declare 命令实现。发布消息生产者使用 channel.basicPublish 方法将消息发送到交换机。在消息中生产者需要指定交换机的名称、路由键以及消息的主体Payload。路由规则交换机根据消息的路由键将消息路由到相应的队列。具体的路由规则取决于交换机的类型。如果找不到与消息路由键匹配的队列根据交换机的规则消息可能会被丢弃或存储在交换机中。消息持久化可选生产者可以选择将消息设置为持久化的。通过在消息的属性中设置 deliveryMode 为 2可以确保消息在服务器重启后不会丢失。关闭通道和连接当生产者完成消息发送后可以选择关闭通道和连接释放资源。关闭通道和连接是通过 AMQP 协议中的 channel.close 和 connection.close 命令来实现的。 AMQP 生产者流转过程包括建立连接、创建通道、声明交换机、发布消息等步骤。生产者通过交换机将消息发送到 RabbitMQ 服务器并根据消息的路由键将消息路由到相应的队列中。生产者可以选择设置消息的持久性确保消息在服务器重启后不会丢失。完成消息发送后生产者可以选择关闭通道和连接释放资源。 2.2.2 AMQP 消费者流转过程 AMQP 消费者Consumer流转过程描述了消费者如何从 RabbitMQ 服务器接收和处理消息的过程。以下是 AMQP 消费者流转过程的详细步骤 建立连接消费者首先与 RabbitMQ 服务器建立一个网络连接。这是通过 TCP/IP 连接到 RabbitMQ 服务器的默认端口5672来实现的。创建通道在建立连接后消费者需要在该连接上创建一个通道Channel。通道是在连接上打开的一个轻量级会话所有的消息传递操作都是在通道上进行的。通道的创建可以通过 AMQP 协议中的 channel.open 命令实现。声明队列消费者需要声明一个队列用于接收消息。队列的声明可以通过 AMQP 协议中的 queue.declare 命令实现。消费者需要指定队列的名称、是否持久化、是否独占等参数。绑定队列和交换机消费者需要将队列绑定到一个或多个交换机上以便从交换机接收消息。绑定可以通过 AMQP 协议中的 queue.bind 命令实现。消费者需要指定交换机的名称、绑定键Binding Key等参数。订阅队列消费者使用 channel.basicConsume 方法订阅队列开始接收消息。在订阅时消费者可以指定消费者标签Consumer Tag和消息回调函数。消息回调当队列中有消息到达时RabbitMQ 服务器会将消息传递给消费者的消息回调函数。消费者可以在回调函数中处理收到的消息。消息确认可选消费者在成功处理消息后可以选择向 RabbitMQ 服务器发送确认信号ACK告知服务器消息已经被成功处理。消息确认可以通过 AMQP 协议中的 basic.ack 命令实现。如果消费者没有发送确认信号RabbitMQ 会认为消息没有被成功处理并将其重新发送给其他消费者或者继续存储在队列中。关闭通道和连接当消费者不再需要接收消息时可以选择关闭通道和连接释放资源。关闭通道和连接是通过 AMQP 协议中的 channel.close 和 connection.close 命令来实现的。 AMQP 消费者流转过程包括建立连接、创建通道、声明队列、绑定队列和交换机、订阅队列、消息回调等步骤。消费者通过订阅队列接收消息当队列中有消息到达时RabbitMQ 服务器将消息传递给消费者的消息回调函数。消费者可以选择发送确认信号来确认消息的处理结果。完成消息接收和处理后消费者可以选择关闭通道和连接释放资源。 2.2.3 AMQP命令概览 AMQPAdvanced Message Queuing Protocol是一个复杂的协议用于在消息传递系统中传输消息。它包含许多不同的命令和方法用于管理连接、通道、交换机、队列以及消息的传递等操作。以下是 AMQP 命令的概览列出了一些常见的AMQP命令和方法 连接管理命令 connection.start启动连接用于协商协议版本和进行身份验证。connection.secure在安全连接上进行身份验证。connection.open打开一个新的连接。connection.close关闭当前连接。 通道管理命令 channel.open打开一个新的通道。channel.close关闭当前通道。 交换机管理命令 exchange.declare声明一个交换机。exchange.delete删除一个交换机。 队列管理命令 queue.declare声明一个队列。queue.bind将队列绑定到一个交换机上。queue.unbind解绑队列和交换机的绑定关系。queue.purge清空队列中的所有消息。queue.delete删除一个队列。 消息传递命令 basic.publish将消息发送到交换机。basic.consume订阅队列接收消息。basic.get从队列中获取单个消息非订阅方式。basic.ack确认收到消息告知服务器消息已被处理。basic.nack否定消息告知服务器消息未被成功处理。basic.reject拒绝消息告知服务器不接受消息。 事务命令 tx.select开启事务。tx.commit提交事务。tx.rollback回滚事务。 其他命令 confirm.select启用发布确认模式用于确认消息是否被正确接收和处理。confirm.select-ok确认发布确认模式已经启用。 以上仅列出了一部分 AMQP 命令和方法实际上 AMQP 协议有更多的命令和参数用于支持复杂的消息传递和系统管理操作。在使用 AMQP 的客户端库时这些命令和方法会被封装成相应的API函数开发者可以通过这些API函数来实现对 RabbitMQ 服务器的操作。 2.3 小结 本章介绍了 RabbitMQ 的入门知识包括相关概念的介绍和 AMQP 协议的简要介绍。在下一章中我们将学习 RabbitMQ 客户端的开发向导包括如何连接 RabbitMQ 服务器、使用交换机和队列、发送和消费消息等。
http://www.dnsts.com.cn/news/129677.html

相关文章:

  • 南昌网站外包有创意的网络营销案例
  • 哈尔滨网站制作网页wordpress固定链接标签加上页面
  • 手机怎么做弹幕小视频网站桂林 网
  • 冠县做网站哪里好做网站大型
  • 网站开发前台代码和后台代码安卓优化大师app下载
  • 北京网站建设服务器维护wordpress 支付下载
  • 郑州网站建设zzwzjs仿win8网站
  • 前端做网站使用的软件工具湛江市手机网站建设企业
  • php网站建设参考文献建筑工程机械人才培训网
  • 甜点网站里的新闻资讯怎么做wordpress排版插件
  • 帮别人做高仿产品网站 违法么网站特殊字体
  • 做a视频网站有哪些建设大型网站设计公司
  • 建立网站软件自己的服务器如何做网站
  • 网站建设选哪家公司好优化网站推广排名
  • 网站建设了流程wordpress网站重做
  • 个人网站建设分几个步走要求维护公司做网站整改的函
  • 忻州 建网站wordpress app 加载慢
  • 网页建站分为几个类型网站建设php有哪些
  • 怎样做网站模板简单html代码
  • 网站建设话术北京建筑信息网
  • 国外做蒸汽锅炉的网站Wordpress 点击量 插件
  • 高校档案网站建设齐齐哈尔网站建设公司
  • 惠州网站建设惠州wordpress 创业
  • 网站收录怎么提高iis7网站绑定域名
  • 网站怎么盈利的百度官方免费下载
  • 免费网站建设基础步骤服务器更改wordpress
  • 南阳做个网站多少钱我公司网站开发技术优势
  • 网站建设更改如果你想了解信息
  • 江苏省城乡建设厅网站首页wordpress那个版本好
  • 免费seo排名网站网站做代码图像显示不出来的