跨平台 AMQP 客户端开发指南

简介: 【8月更文第28天】高级消息队列协议 (AMQP) 是一种开放标准的应用层协议,用于中间件。它定义了消息如何在消息代理(通常是消息队列服务器)与客户端应用程序之间传递。本文将指导您如何为不同的编程语言构建跨平台的 AMQP 客户端,并提供一些具体的代码示例。

摘要

高级消息队列协议 (AMQP) 是一种开放标准的应用层协议,用于中间件。它定义了消息如何在消息代理(通常是消息队列服务器)与客户端应用程序之间传递。本文将指导您如何为不同的编程语言构建跨平台的 AMQP 客户端,并提供一些具体的代码示例。

1. 引言

AMQP 协议支持多种消息传递模式,包括发布/订阅、点对点等。由于其开放性和标准化的特点,AMQP 成为了许多分布式系统中消息传递的首选方案。本指南旨在帮助开发者了解如何使用不同的编程语言创建 AMQP 客户端。

2. 工具选择

对于跨平台的 AMQP 客户端开发,我们推荐使用以下工具和技术栈:

  • RabbitMQ:一个开源的消息代理,支持 AMQP 协议。
  • Libraries
    • Python: pika
    • Java: RabbitMQ Java Client
    • Node.js: amqplib
    • C#: RabbitMQ.Client

3. 示例代码

3.1 Python (使用 Pika)

Python 中可以使用 pika 库来实现 AMQP 客户端。下面是一个简单的 Python 发送者和接收者的例子。

发送者:
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()

channel.queue_declare(queue='hello')

channel.basic_publish(exchange='',
                      routing_key='hello',
                      body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()
接收者:
import pika

def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()

channel.queue_declare(queue='hello')

channel.basic_consume(queue='hello',
                      on_message_callback=callback,
                      auto_ack=True)

print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
3.2 Java (使用 RabbitMQ Java Client)

Java 开发者通常会使用官方提供的 RabbitMQ Java Client 库。

发送者:
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class Send {
   
    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws Exception {
   
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        try (Connection connection = factory.newConnection();
             Channel channel = connection.createChannel()) {
   
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            String message = "Hello World!";
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
            System.out.println(" [x] Sent '" + message + "'");
        }
    }
}
接收者:
import com.rabbitmq.client.*;

public class Receive {
   
    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws Exception {
   
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        try (Connection connection = factory.newConnection();
             Channel channel = connection.createChannel()) {
   
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

            DeliverCallback deliverCallback = (consumerTag, delivery) -> {
   
                String message = new String(delivery.getBody(), "UTF-8");
                System.out.println(" [x] Received '" + message + "'");
            };
            channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> {
   });
        }
    }
}
3.3 Node.js (使用 amqplib)

Node.js 社区通常会选择 amqplib 这个库。

发送者:
const amqp = require('amqplib/callback_api');

amqp.connect('amqp://localhost', (err, conn) => {
   
  conn.createChannel((err, ch) => {
   
    const q = 'hello';
    ch.assertQueue(q, {
    durable: false });
    console.log(` [x] Sending 'Hello World!'`);
    ch.sendToQueue(q, Buffer.from('Hello World!'));
    setTimeout(() => {
    conn.close(); process.exit(0); }, 500);
  });
});
接收者:
const amqp = require('amqplib/callback_api');

amqp.connect('amqp://localhost', (err, conn) => {
   
  conn.createChannel((err, ch) => {
   
    const q = 'hello';
    ch.assertQueue(q, {
    durable: false });
    console.log(` [*] Waiting for messages in ${
     q}. To exit press CTRL+C`);

    ch.consume(q, (msg) => {
   
      console.log(` [x] Received '${
     msg.content.toString()}'`);
    }, {
    noAck: true });
  });
});

4. 总结

本文提供了几种常见编程语言下的 AMQP 客户端实现示例。通过这些示例,您可以快速上手并构建自己的 AMQP 应用程序。无论是进行消息的发布还是订阅,AMQP 都能提供稳定且高效的服务。

5. 参考资料

通过这些工具和示例代码,您可以开始构建您的跨平台 AMQP 客户端应用。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
图形学
Unity 不同Scene场景转换(简)
本文提供了Unity中实现场景转换的基本方法,包括编写传送脚本、创建传送门和玩家对象,并通过触发器实现玩家触碰传送门时切换到另一个场景的功能。
Unity 不同Scene场景转换(简)
|
Linux C语言
C语言获取文件长度
C语言获取文件长度
|
消息中间件 存储 Java
详解AMQP协议
详解AMQP协议
1754 0
|
10月前
|
机器学习/深度学习 人工智能 算法
智创 AI 新视界 -- 提升 AI 推理速度的高级方法(16 - 2)
本文深度聚焦提升 AI 推理速度,全面阐述模型压缩(低秩分解、参数量化)、硬件加速(GPU、TPU)及推理算法优化(剪枝感知推理、动态批处理)。结合图像识别等多领域案例与丰富代码示例,以生动形象且专业严谨的方式,为 AI 从业者提供极具价值的技术指南,助力突破 AI 推理速度瓶颈,实现系统性能跃升。
|
3月前
|
人工智能 Oracle 关系型数据库
Oracle AI Database 26ai - 适用于所有数据的新一代 AI 原生数据库
Oracle AI Database 26ai - 适用于所有数据的新一代 AI 原生数据库
343 1
|
编解码 UED
Qt侧边栏的动态切换:隐藏与显示技术详解
在现代用户界面设计中,侧边栏(Sidebar)是一个常见的组件,它为用户提供了导航和工具面板的功能。在某些应用场景下,我们可能需要动态地隐藏或显示侧边栏,以优化界面布局或提供更灵活的用户体验。本文将分享如何在Qt框架下实现侧边栏的隐藏与呈现,包括技术细节和代码示例。
1344 3
|
7月前
|
运维 Dubbo Cloud Native
Dubbo 云原生重构出击:更快部署、更强控制台、更智能运维
Apache Dubbo 最新升级支持云原生,提供一键部署微服务集群与全新可视化控制台,提升全生命周期管理体验,助力企业高效构建云原生应用。
811 25
|
前端开发 JavaScript 安全
如何在 React Native 中实现热更新?
如何在 React Native 中实现热更新?
1453 64
|
人工智能 JSON API
利用TTS技术让你的AI Agent发声
【10月更文挑战第5天】
1083 4
利用TTS技术让你的AI Agent发声
|
虚拟化 Windows
VMwareWorkstationPro16的下载与安装,以及vm账号注册的问题
本文介绍了VMware Workstation Pro 16的下载、安装过程以及VMware账号的注册问题,包括如何检查虚拟化支持是否开启、VMware的下载步骤、注册VM账号时的常见问题以及VMware 16的安装步骤。
VMwareWorkstationPro16的下载与安装,以及vm账号注册的问题