使用 AMQ .NET 客户端
使开源包含更多 复制链接链接已复制到粘贴板!
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息。
第 1 章 概述 复制链接链接已复制到粘贴板!
AMQ .NET 是 .NET 平台的轻量级 AMQP 1.0 库。它可让您编写用于发送和接收 AMQP 消息的 .NET 应用程序。
AMQ .NET 是 AMQ 客户端的一部分,这是支持多种语言和平台的一系列消息传递库。有关客户端的概述,请参阅 AMQ 客户端概述。有关此发行版本的详情,请参考 AMQ Clients 2.11 发行注记。
AMQ .NET 基于 AMQP.Net Lite。有关详细的 API 文档,请参阅 AMQ .NET API 参考。
1.1. 主要特性 复制链接链接已复制到粘贴板!
- 用于安全通信的 SSL/TLS
- 灵活的 SASL 身份验证
- AMQP 和原生数据类型之间的无缝转换
- 访问 AMQP 1.0 的所有特性和功能
- 具有完整 IntelliSense API 文档的集成开发环境
1.2. 支持的标准和协议 复制链接链接已复制到粘贴板!
AMQ .NET 支持以下行业认可的标准和网络协议:
- 高级消息队列协议 (AMQP)的版本 1.0
- 传输层安全 (TLS)协议的 1.0、1.1、1.2 和 1.3,是 SSL 的后续版本
- 简单的身份验证和安全层 (SASL)机制 ANONYMOUS, PLAIN, 和 EXTERNAL
- 使用 IPv6的现代 TCP
1.3. 支持的配置 复制链接链接已复制到粘贴板!
有关 AMQ .NET 支持的配置 的当前信息,请参阅红帽客户门户网站上的 Red Hat AMQ 支持的配置。
1.4. 术语和概念 复制链接链接已复制到粘贴板!
本节介绍核心 API 实体,并描述它们如何一起工作。
实体 | 描述 |
---|---|
连接 | 网络上两个对等点间的通信的频道 |
会话 | 发送和接收消息的上下文 |
发件人链接 | 将信息发送到目标的频道 |
接收器链接 | 从源接收消息的频道 |
源 | 用于消息的命名源点 |
目标 | 消息的命名目的地 |
消息 | 应用程序数据的可变持有者 |
AMQ .NET 发送并接收信息。通过 链接 在连接的对等点之间传输消息。通过会话建立 链接。会话通过 连接建立。
发送对等点会创建 发送邮件的发送者链接。发件人链接具有一个 目标,用于标识远程对等点上的队列或主题。接收客户端会创建一个 接收器链接 来接收信息。接收器链接有一个 源,用于标识远程对等点上的队列或主题。
1.5. 文档惯例 复制链接链接已复制到粘贴板!
sudo 命令
在本文档中,sudo
用于任何需要 root 特权的命令。使用 sudo
时请谨慎操作,因为任何更改都可能会影响整个系统。有关 sudo
的更多信息,请参阅使用 sudo 命令。
文件路径
在本文档中,所有文件路径都对 Linux、UNIX 和类似操作系统(例如 /home/andrea
)有效。在 Microsoft Windows 上,您必须使用对应的 Windows 路径(例如 C:\Users\andrea
)。
变量文本
本文档包含代码块,其中的变量必须替换为特定于您的环境的值。变量文本以箭头括号括起,样式为方便的 monospace。例如,使用以下命令将 < project-dir>
; 替换为环境的值:
cd <project-dir>
$ cd <project-dir>
第 2 章 安装 复制链接链接已复制到粘贴板!
本章介绍了在您的环境中安装 AMQ .NET 的步骤。
2.1. 先决条件 复制链接链接已复制到粘贴板!
- 您必须具有访问 AMQ 发行文件和软件仓库 的订阅。
- 要在 Red Hat Enterprise Linux 上使用 AMQ .NET,您必须安装 .NET Core 3.1 开发人员工具。如需更多信息,请参阅 .NET Core 3.1 入门指南。
- 要在 Microsoft Windows 上使用 AMQ .NET 构建程序,您必须安装 Visual Studio。
2.2. 在 Red Hat Enterprise Linux 上安装 复制链接链接已复制到粘贴板!
流程
- 打开浏览器并登录红帽客户门户网站 产品下载页面,网址为 access.redhat.com/downloads。
- 找到 INTEGRATION AND AUTOMATION 类别中的 Red Hat AMQ Clients 条目。
- 点 Red Hat AMQ Clients。此时会打开 Software Downloads 页面。
- 下载 AMQ Clients 2.11.0 .NET Core .zip 文件。
使用
unzip
命令将文件内容提取到您选择的目录中。unzip amq-clients-2.11.0-dotnet-core.zip
$ unzip amq-clients-2.11.0-dotnet-core.zip
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当您提取 .zip 文件的内容时,会创建一个名为
amq-clients-2.11.0-dotnet-core
的目录。这是安装的顶级目录,在整个文档中被称为 <install-dir&
gt;。使用文本编辑器创建文件
$HOME/.nuget/NuGet/NuGet.Config
,并添加以下内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您已有一个
NuGet.Config
文件,请将amq-clients
行添加到其中。或者,您可以将 <
install-dir>/nupkg 目录中的 .nupkg
文件移到现有的软件包源位置。
2.3. 在 Microsoft Windows 上安装 复制链接链接已复制到粘贴板!
流程
- 打开浏览器并登录红帽客户门户网站 产品下载页面,网址为 access.redhat.com/downloads。
- 找到 INTEGRATION AND AUTOMATION 类别中的 Red Hat AMQ Clients 条目。
- 点 Red Hat AMQ Clients。此时会打开 Software Downloads 页面。
- 下载 AMQ Clients 2.11.0 .NET .zip 文件。
- 将文件内容提取到您选择的目录中,方法是右键单击 zip 文件并选择 Extract All。
当您提取 .zip 文件的内容时,会创建一个名为 amq-clients-2.11.0-dotnet
的目录。这是安装的顶级目录,在整个文档中被称为 < install-dir&
gt;。
第 3 章 开始使用 复制链接链接已复制到粘贴板!
本章介绍了设置环境并运行简单的消息传递程序的步骤。
3.1. 先决条件 复制链接链接已复制到粘贴板!
3.2. 在 Red Hat Enterprise Linux 上运行 HelloWorld 复制链接链接已复制到粘贴板!
Hello World 示例创建了一个与代理的连接,发送一条消息,其中包含到 amq.topic
队列的问候队列,然后接收它。成功时,它会将收到的消息输出到控制台。
进入 < ;install-dir> /examples/netcoreapp3/HelloWorld-simple
,并使用 dotnet run
构建和执行程序。
cd <install-dir>/examples/netcoreapp3/HelloWorld-simple dotnet run
$ cd <install-dir>/examples/netcoreapp3/HelloWorld-simple
$ dotnet run
Hello World!
3.3. 在 Microsoft Windows 上运行 Hello World 复制链接链接已复制到粘贴板!
Hello World 示例创建了一个与代理的连接,发送一条消息,其中包含到 amq.topic
队列的问候队列,然后接收它。成功时,它会将收到的消息输出到控制台。
流程
-
导航到 <
;install-dir&
gt;,并在 Visual Studio 中打开amqp.sln
解决方案文件。 - 从 Build 菜单中选择 Build Solution 来编译解决方案。
打开命令提示符窗口并执行以下命令来发送和接收信息:
> cd <install-dir>\bin\Debug > HelloWorld-simple Hello World!
> cd <install-dir>\bin\Debug > HelloWorld-simple Hello World!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 4 章 例子 复制链接链接已复制到粘贴板!
本章演示了通过示例程序使用 AMQ .NET。
如需了解更多示例,请参阅 AMQ .NET 示例套件和 AMQP.Net Lite 示例。
4.1. 发送消息 复制链接链接已复制到粘贴板!
此客户端程序使用 < connection-url
> 连接到服务器,为目标 <address& gt;
创建发件人,发送一条消息,包含 <message-body
>、关闭连接并退出。
示例:发送消息
- 1
使用 Amqp;
导入 Amqp 命名空间中定义的类型。AMQP 由项目引用 Amqp.Net.dll 定义,并提供与 AMQ .NET 关联的所有类、接口和值类型。- 2
- 命令行 arg[0]
url
是 AMQP 连接的主机或虚拟主机的网络地址。这个字符串描述了连接传输、用户和密码凭证,以及远程主机上连接的端口号。URL 可以处理路由器网络的代理、独立对等点或入口点。 - 3
- 命令行 arg[1] 目标是远程主机上消息目标端点或资源的名称。
- 4
- 命令行 arg[2]
计数
是要发送的消息数。 - 5
peerAddr
是创建 AMQP 连接所需的结构。- 6
- 创建 AMQP 连接。
- 7
sender
是发送邮件的客户端 SenderLink。链接是任意命名的 send-1。使用环境中有意义的链接名称,并有助于识别忙碌系统中的流量。链接名称不受到限制,但在同一会话中必须唯一。- 8
- 在消息中,发送循环将创建一个新消息。
- 9
- 该消息发送到 AMQP 对等点。
- 10
- 在所有消息发送后,协议对象将按顺序关闭。
运行示例
要运行示例程序,请编译程序并从命令行执行它。如需更多信息,请参阅 第 3 章 开始使用。
<install-dir>\bin\Debug>simple_send "amqp://guest:guest@localhost" service_queue
<install-dir>\bin\Debug>simple_send "amqp://guest:guest@localhost" service_queue
4.2. 接收信息 复制链接链接已复制到粘贴板!
此客户端程序使用 < connection-url
> 连接到服务器,为源 <address& gt;
创建一个接收器,并接收信息直到终止或到达 < count>
信息。
示例:接收信息
- 1
使用 Amqp;
导入 Amqp 命名空间中定义的类型。AMQP 由项目引用 Amqp.Net.dll 定义,并提供与 AMQ .NET 关联的所有类、接口和值类型。- 2
- 命令行 arg[0]
url
是 AMQP 连接的主机或虚拟主机的网络地址。这个字符串描述了连接传输、用户和密码凭证,以及远程主机上连接的端口号。URL 可以处理路由器网络的代理、独立对等点或入口点。 - 3
- 命令行 arg[1] 源是远程主机上消息源端点或资源的名称。
- 4
- 命令行 arg[2]
计数
是要发送的消息数。 - 5
peerAddr
是创建 AMQP 连接所需的结构。- 6
- 创建 AMQP 连接。
- 7
接收器
是一个客户端 ReceiverLink,可以接收该消息。链接是任意命名的 recv-1。使用环境中有意义的链接名称,并有助于识别忙碌系统中的流量。链接名称不受到限制,但在同一会话中必须唯一。- 8
- 收到一条消息。
- 9
- 可以接受消息。这会将消息的所有权从对等点传输到接收器。
- 10
- 收到所有消息后,协议对象将按顺序关闭。
运行示例
要运行示例程序,请编译程序并从命令行执行它。如需更多信息,请参阅 第 3 章 开始使用。
<install-dir>\bin\Debug>simple_recv "amqp://guest:guest@localhost" service_queue
<install-dir>\bin\Debug>simple_recv "amqp://guest:guest@localhost" service_queue
第 5 章 网络连接 复制链接链接已复制到粘贴板!
5.1. 连接 URI 复制链接链接已复制到粘贴板!
本节描述了用于连接 AMQP 远程对等的连接 URI 字符串的标准格式。
scheme = ( "amqp" | "amqps" ) host = ( <fully qualified domain name> | <hostname> | <numeric IP address> ) URI = scheme "://" [user ":" [password] "@"] host [":" port]
scheme = ( "amqp" | "amqps" )
host = ( <fully qualified domain name> | <hostname> | <numeric IP address> )
URI = scheme "://" [user ":" [password] "@"] host [":" port]
- scheme amqp - connection 使用 TCP 传输,并将默认端口设置为 5672。
- scheme amqps - 连接使用 SSL/TLS 传输,并将默认端口设置为 5671。
- user - 可选连接身份验证用户名。如果存在 用户名,客户端会在连接启动期间启动 AMQP SASL 用户凭证交换。
- password - 可选连接身份验证密码。
- host - 定向到连接的网络主机。
- port - 连接定向到的可选网络端口。默认端口 值由 AMQP 传输方案决定。
连接 URI 示例
amqp://127.0.0.1 amqp://amqpserver.example.com:5672 amqps://joe:somepassword@bigbank.com amqps://sue:secret@test.example.com:21000
amqp://127.0.0.1
amqp://amqpserver.example.com:5672
amqps://joe:somepassword@bigbank.com
amqps://sue:secret@test.example.com:21000
5.2. 重新连接和故障转移 复制链接链接已复制到粘贴板!
AMQ .NET 不提供重新连接和故障转移,但可以通过截获连接错误和重新连接来在应用程序中实施。有关代码示例,请参阅 ReconnectSender.cs 示例。
第 6 章 安全性 复制链接链接已复制到粘贴板!
6.1. 使用用户和密码连接 复制链接链接已复制到粘贴板!
AMQ .NET 可以使用用户和密码验证连接。
要指定用于身份验证的凭证,请在连接 URL 中设置 user
和 password
字段。
示例:使用用户和密码连接
Address addr = new Address("amqp://<user>:<password>@example.com"); Connection conn = new Connection(addr);
Address addr = new Address("amqp://<user>:<password>@example.com");
Connection conn = new Connection(addr);
6.2. 配置 SASL 身份验证 复制链接链接已复制到粘贴板!
到远程对等点的客户端连接可以交换 SASL 用户名和密码凭证。连接 URI 中存在 user 字段控制此交换。如果指定了 user ,则交换 SASL 凭证;如果用户不存在,则不会交换 SASL 凭证。
默认情况下,客户端支持 EXTERNAL、PLAIN 和 ANONYMOUS SASL 机制。
6.3. 配置 SSL/TLS 传输 复制链接链接已复制到粘贴板!
与服务器的安全通信是通过 SSL/TLS 来实现的。客户端只能为 SSL/TLS Handshake 配置,或为 SSL/TLS Handshake 和客户端证书身份验证配置。如需更多信息,请参阅管理证书 部分。
TLS Server Name Indication (SNI)由客户端库自动处理。但是,SNI 仅针对使用 amqps 传输协议的地址信号,其中主机是完全限定域名或主机名。当主机是数字 IP 地址时,SNI 不会发出信号。
第 7 章 发件人和接收器 复制链接链接已复制到粘贴板!
客户端使用发送方和接收器链接来代表传递消息的频道。发件人和接收器是单向的,消息来源的源结尾和消息目的地的目标结尾。
源和目标通常指向消息代理上的队列或主题。源也用于代表订阅。
7.1. 根据需要创建队列和主题 复制链接链接已复制到粘贴板!
有些消息服务器支持按需创建队列和主题。附加发送方或接收器时,服务器使用发送者目标地址或接收器源地址来创建名称与地址匹配的队列或主题。
邮件服务器通常默认为创建队列(用于一对一消息发送)或主题(用于一对多消息发送)。客户端可以通过在源或目标上设置
功能来指示首选情况。
队列或主题
要选择队列或主题语义,请按照以下步骤执行:
- 配置您的消息服务器,以自动创建队列和主题。这通常是默认配置。
-
在发送者目标或接收器源上设置
队列或主题
功能,如下例所示。
示例:发送到按需创建的队列
示例:从按需创建的主题接收
如需更多信息,请参阅以下示例:
7.2. 创建持久订阅 复制链接链接已复制到粘贴板!
持久化订阅是远程服务器上的一个状态,代表一个消息接收器。通常,当客户端关闭时,消息接收方会被丢弃。但是,由于持久订阅是持久的,客户端可以从它们分离,之后再重新连接。当客户端重新附加时,任何在分离时收到的消息都可用。
持久化订阅通过组合客户端容器 ID 和接收器名称来组成订阅 ID 来唯一标识。它们必须具有稳定的值,以便可以恢复订阅。
要创建持久订阅,请按照以下步骤执行:
将连接容器 ID 设置为 stable 值,如
client-1
:Connection conn = new Connection(new Address(connUrl), SaslProfile.Anonymous, new Open() { ContainerId = "client-1" }, null);
Connection conn = new Connection(new Address(connUrl), SaslProfile.Anonymous, new Open() { ContainerId = "client-1" }, null);
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过设置
Durable
和ExpiryPolicy
属性来配置接收器源以实现持久性:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用稳定名称(如
sub-1
)创建一个接收器,并应用源属性:ReceiverLink receiver = new ReceiverLink(session, "sub-1", source, null);
ReceiverLink receiver = new ReceiverLink(session, "sub-1", source, null);
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
要从订阅分离,请在不明确关闭接收器的情况下关闭连接。要终止订阅,直接关闭接收器。
如需更多信息,请参阅 DurableSubscribe.cs 示例。
第 8 章 消息交付 复制链接链接已复制到粘贴板!
8.1. 发送消息 复制链接链接已复制到粘贴板!
要发送消息,请创建一个连接、会话和发件人链接,然后使用 Message
对象调用 Sender.Send ()
方法。
示例:发送消息
如需更多信息,请参阅 Send.cs 示例。
8.2. 接收信息 复制链接链接已复制到粘贴板!
要接收消息,请创建一个连接、会话和接收器链接,然后调用 Receiver.Receive ()
方法,并使用返回的 Message
对象。
示例:接收信息
Receiver.Accept ()
调用告知远程对等点接收和处理消息。
如需更多信息,请参阅 Receive.cs 示例。
第 9 章 日志记录 复制链接链接已复制到粘贴板!
日志记录在故障排除和调试中非常重要。默认情况下关闭日志记录。要启用日志记录,您必须设置日志级别,并提供委派功能来接收日志消息。
9.1. 设置日志输出级别 复制链接链接已复制到粘贴板!
库在不同级别上发送日志跟踪:
- Error
- 警告
- 信息
- 详细
最低的日志级别 Error,仅跟踪错误事件并生成很少的日志消息。更高的日志级别包括它下面的所有日志级别,并生成大量日志消息。
// Enable Error logs only. Trace.TraceLevel = TraceLevel.Error
// Enable Error logs only.
Trace.TraceLevel = TraceLevel.Error
// Enable Verbose logs. This includes logs at all log levels. Trace.TraceLevel = TraceLevel.Verbose
// Enable Verbose logs. This includes logs at all log levels.
Trace.TraceLevel = TraceLevel.Verbose
9.2. 启用协议日志记录 复制链接链接已复制到粘贴板!
日志级别 帧 的处理方式不同。设置 trace 级别 帧 可为 AMQP 协议标头和帧启用追踪输出。
在其它日志级别之一时,追踪必须以逻辑方式 ORed 和 Frame 获取常规追踪输出和 AMQP 框架追踪。例如:
// Enable just AMQP frame tracing Trace.TraceLevel = TraceLevel.Frame;
// Enable just AMQP frame tracing
Trace.TraceLevel = TraceLevel.Frame;
// Enable AMQP Frame logs, and Warning and Error logs Trace.TraceLevel = TraceLevel.Frame | TraceLevel.Warning;
// Enable AMQP Frame logs, and Warning and Error logs
Trace.TraceLevel = TraceLevel.Frame | TraceLevel.Warning;
以下代码将 AMQP 帧写入控制台。
示例:日志记录委托
Trace.TraceLevel = TraceLevel.Frame; Trace.TraceListener = (f, a) => Console.WriteLine( DateTime.Now.ToString("[hh:mm:ss.fff]") + " " + string.Format(f, a));
Trace.TraceLevel = TraceLevel.Frame;
Trace.TraceListener = (f, a) => Console.WriteLine(
DateTime.Now.ToString("[hh:mm:ss.fff]") + " " + string.Format(f, a));
第 10 章 互操作性 复制链接链接已复制到粘贴板!
本章讨论了如何将 AMQ .NET 与其他 AMQ 组件一起使用。有关 AMQ 组件的兼容性概述,请参阅 产品简介。
10.1. 与其他 AMQP 客户端交互 复制链接链接已复制到粘贴板!
AMQP 消息使用 AMQP 类型系统 组成。这种通用格式是以不同语言的 AMQP 客户端能够相互互操作的原因之一。
发送消息时,AMQ .NET 会自动将语言原生类型转换为 AMQP 编码数据。收到信息时,反向转换就发生。
有关 AMQP 类型的更多信息,请访问由 Apache Qpid 项目维护 的交互式类型参考。
AMQP 类型 | 描述 |
---|---|
一个空值 | |
true 或 false 值 | |
单个 Unicode 字符 | |
一系列 Unicode 字符 | |
一个字节序列 | |
签名的 8 位整数 | |
签名的 16 位整数 | |
签名的 32 位整数 | |
签名的 64 位整数 | |
未签名的 8 位整数 | |
未签名的 16 位整数 | |
未签名的 32 位整数 | |
未签名的 64 位整数 | |
32 位浮点号 | |
64 位浮点号 | |
单个类型的值的序列 | |
变量类型的序列值 | |
从不同键到值的映射 | |
通用唯一标识符 | |
来自受限域的 7 位 ASCII 字符串 | |
一个绝对时间点 |
AMQP 类型 | 编码前的 AMQ .NET 类型 | 解码后 AMQ .NET 类型 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
编码前的 AMQ .NET 类型 | AMQ C++ 类型 | AMQ JavaScript 类型 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
编码前的 AMQ .NET 类型 | AMQ Python 类型 | AMQ Ruby 类型 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| - | - |
|
|
|
|
|
|
10.2. 使用 AMQ JMS 进行交互 复制链接链接已复制到粘贴板!
AMQP 定义标准映射到 JMS 消息传递模型。本节讨论该映射的各个方面。如需更多信息,请参阅 AMQ JMS Interoperability 章节。
JMS 消息类型
AMQ .NET 提供单个消息类型,其正文类型可能会有所不同。相反,JMS API 使用不同的消息类型来代表不同类型的数据。下表标明特定的正文类型如何映射到 JMS 消息类型。
若要更明确地控制生成的 JMS 消息类型,您可以设置 x-opt-jms-msg-type
消息注释。如需更多信息,请参阅 AMQ JMS Interoperability 章节。
AMQ .NET 正文类型 | JMS 消息类型 |
---|---|
| |
| |
| |
任何其他类型 |
10.3. 连接到 AMQ Broker 复制链接链接已复制到粘贴板!
AMQ Broker 旨在与 AMQP 1.0 客户端互操作。检查以下内容以确保为 AMQP 消息传递配置了代理:
- 网络防火墙中的端口 5672 将打开。
- 启用 AMQ Broker AMQP acceptor。请参阅 默认接受者设置。
- 在代理上配置必要的地址。请参阅 地址、队列和主题。
- 代理配置为允许来自您的客户端的访问,客户端被配置为发送所需的凭证。请参阅 Broker 安全。
附录 A. 管理证书 复制链接链接已复制到粘贴板!
A.1. 安装证书颁发机构证书 复制链接链接已复制到粘贴板!
SSL/TLS 身份验证依赖于受信任的证书颁发机构(CA)发布的数字证书。当由客户端建立 SSL/TLS 连接时,AMQP 对等点向客户端发送服务器证书。此服务器证书必须由客户端的 受信任的根证书颁发机构 证书存储中的其中一个 CA 签名。
如果用户正在创建自签名证书以供 Red Hat AMQ Broker 使用,则用户必须创建一个 CA 来签署证书。然后,用户可以通过安装自签名 CA 文件 ca.crt
来启用客户端 SSL/TLS 握手。
-
在管理员命令提示符中运行 MMC 证书管理器插件
certmgr.msc
。 - 展开左侧的 受信任的根证书颁发机构 文件夹,以公开 证书。
- 右键点击 Certificates 并选择 All Tasks,然后选择 。
- 点击 Next。
-
浏览以选择文件
ca.crt
。 - 点击 Next。
- 选择 Place 以下存储中的所有证书。
- 选择证书存储 受信任的根证书颁发机构。
- 点击 Next。
- 点 Finish。
有关安装证书的更多信息,请参阅管理 Microsoft 证书服务和 SSL。
A.2. 安装客户端证书 复制链接链接已复制到粘贴板!
要使用 SSL/TLS 和客户端证书,客户端的私钥的证书必须导入到客户端系统上的正确证书存储中。
-
在管理员命令提示符中运行 MMC 证书管理器插件
certmgr.msc
。 - 展开左侧的 Personal 文件夹,以公开 证书。
- 右键点击 Certificates 并选择 All Tasks,然后选择 。
- 点击 Next。
- 点 Browse。
-
在文件类型下拉列表中,选择 Personal Information Exchange
(\.pfx;*.p12)
。 -
选择文件
client.p12
,然后单击 Open。 - 点 Next。
- 输入私钥密码字段的密码。接受默认导入选项。
- 点击 Next。
- 选择 Place 以下存储中的所有证书。
- 选择证书存储 个人。
- 点击 Next。
- 点 Finish。
A.3. 使用客户端证书 hello World 复制链接链接已复制到粘贴板!
在客户端向代理返回证书前,必须告知 AMQ .NET 库要使用的证书。客户端证书文件 client.crt
添加到在 SChannel
连接启动过程中使用的证书列表中。
factory.SSL.ClientCertificates.Add( X509Certificate.CreateFromCertFile(certfile) );
factory.SSL.ClientCertificates.Add(
X509Certificate.CreateFromCertFile(certfile)
);
在本例中,certfile
是个人证书存储中安装的 client.p12
证书的完整路径。HelloWorld-client-certs.cs
中找到了一个完整的示例。SDK 中提供了此源文件和支持的项目文件。
附录 B. 程序示例 复制链接链接已复制到粘贴板!
B.1. 先决条件 复制链接链接已复制到粘贴板!
-
Red Hat AMQ Broker,带有名为
amq.topic
的队列,以及名为service_queue
的队列,其具有读/写权限。在本图例中,代理位于 IP 地址10.10.1.1
。 -
带有源和目标名称
amq.topic
的 Red Hat AMQ Interconnect 带有适当的权限。为此,路由器位于 IP 地址10.10.2.2
。
所有示例都从 < install-dir>\bin\Debug
运行。
B.2. helloworld 简单 复制链接链接已复制到粘贴板!
helloworld-simple 是一个简单示例,它为同一地址创建一个 Sender 和 Receiver,向地址发送消息,从地址读取消息并打印结果。
helloworld-simple 命令行选项
Command line: HelloWorld-simple [brokerUrl [brokerEndpointAddress]] Default: HelloWorld-simple amqp://localhost:5672 amq.topic
Command line:
HelloWorld-simple [brokerUrl [brokerEndpointAddress]]
Default:
HelloWorld-simple amqp://localhost:5672 amq.topic
helloworld-simple 示例调用
HelloWorld-simple
$ HelloWorld-simple
Hello world!
默认情况下,该程序连接到在 localhost:5672 上运行的代理。在命令行中明确指定主机和端口,以及 AMQP 端点地址:
HelloWorld-simple amqp://someotherhost.com:5672 endpointname
$ HelloWorld-simple amqp://someotherhost.com:5672 endpointname
默认情况下,该程序将其消息解析为 amq.topic
。在一些 Amqp 代理 amq.topic 中,是一个预定义的端点地址,它会立即在没有代理配置的情况下可用。如果代理中不存在这个地址,则使用代理管理工具创建它。
B.3. helloworld 稳定 复制链接链接已复制到粘贴板!
helloworld-robust 与附加选项和处理共享简单示例的所有功能:
访问简单有效负载之外的消息属性:
- 标头
- DeliveryAnnotations
- MessageAnnotations
- Properties
- ApplicationProperties
- BodySection
- footer
- 连接关闭序列
helloworld-robust 命令行选项
Command line: HelloWorld-robust [brokerUrl [brokerEndpointAddress [payloadText [enableTrace]]]] Default: HelloWorld-robust amqp://localhost:5672 amq.topic "Hello World"
Command line:
HelloWorld-robust [brokerUrl [brokerEndpointAddress [payloadText [enableTrace]]]]
Default:
HelloWorld-robust amqp://localhost:5672 amq.topic "Hello World"
enableTrace 参数的简单存在启用追踪。参数可以保存任何值。
helloworld-robust 示例调用
HelloWorld-robust
$ HelloWorld-robust
Broker: amqp://localhost:5672, Address: amq.topic, Payload: Hello World!
body:Hello World!
helloworld-robust 允许用户指定有效负载字符串并启用 trace 协议日志记录。
HelloWorld-robust amqp://localhost:5672 amq.topic "My Hello" loggingOn
$ HelloWorld-robust amqp://localhost:5672 amq.topic "My Hello" loggingOn
AMQ .NET 示例 Interop.Drain 和 Interop.Spout 演示了与 Red Hat AMQ Interconnect 的交互。在这种情况下,没有消息代理。相反,Red Hat AMQ Interconnect 会注册客户端程序请求的地址,并在它们之间路由信息。
Interop.Drain 命令行选项
Interop.Spout 命令行选项
Interop.Spout 和 Interop.Drain 示例调用
在一个窗口中运行 Interop.drain。排空会等待一条消息到达。
Interop.Drain.exe --broker amqp://10.10.2.2:5672 --forever --count 1 --address amq.topic
$ Interop.Drain.exe --broker amqp://10.10.2.2:5672 --forever --count 1 --address amq.topic
在另一个窗口中运行 Interop.spout。Spout 会向代理地址发送消息并退出。
interop.spout --broker amqp://10.10.2.2:5672 --address amq.topic
$ interop.spout --broker amqp://10.10.2.2:5672 --address amq.topic
$
现在,在第一个窗口中,排空信息将收到 spout 信息,然后退出。
Interop.Drain.exe --broker amqp://10.10.2.2:5672 --forever --count 1 --address amq.topic
$ Interop.Drain.exe --broker amqp://10.10.2.2:5672 --forever --count 1 --address amq.topic
Message(Properties=properties(message-id:9803e781-14d3-4fa7-8e39-c65e18f3e8ea:0), ApplicationProperties=, Body=
$
B.5. Interop.Client, Interop.Server (request-response) 复制链接链接已复制到粘贴板!
本例演示了基于代理的简单服务器,它将接受来自客户端的字符串,将其转换为大写,并将它们发回到客户端。它有两个组件:
- client - 向服务器发送行并打印响应。
- server - 将传入的字符串转换为大写的简单服务,并将它们返回到请求者。
在本例中,服务器和客户端共享名为 service_queue
的代理中的服务端点。服务器在服务端点中侦听消息。客户端创建临时动态 ReplyTo 队列,将临时名称嵌入到请求中,并将请求发送到服务器。在接收和处理每个请求后,服务器会将回复发送到客户端的临时 ReplyTo 地址。
Interop.Client 命令行选项
Command line: Interop.Client [peerURI [loopcount]] Default: Interop.Client amqp://guest:guest@localhost:5672 1
Command line:
Interop.Client [peerURI [loopcount]]
Default:
Interop.Client amqp://guest:guest@localhost:5672 1
Interop.Server 命令行选项
Command line: Interop.Server [peerURI] Default: Interop.Server amqp://guest:guest@localhost:5672
Command line:
Interop.Server [peerURI]
Default:
Interop.Server amqp://guest:guest@localhost:5672
Interop.Client, Interop.Server sample invocation
可使用这些命令行启动程序:
Interop.Server.exe amqp://guest:guest@localhost:5672 Interop.Client.exe amqp://guest:guest@localhost:5672
$ Interop.Server.exe amqp://guest:guest@localhost:5672
$ Interop.Client.exe amqp://guest:guest@localhost:5672
PeerToPeer.Server 在命令行给出的地址上创建一个监听程序。此地址初始化侦听传入连接的 ContainerHost 类对象。接收的消息异步转发到 RequestProcessor 类对象。
PeerToPeer.Client 会打开与服务器的连接,并开始向服务器发送消息。
PeerToPeer.Client 命令行选项
Command line: PeerToPeer.Client [peerURI] Default: PeerToPeer.Client amqp://guest:guest@localhost:5672
Command line:
PeerToPeer.Client [peerURI]
Default:
PeerToPeer.Client amqp://guest:guest@localhost:5672
PeerToPeer.Server 命令行选项
Command line: PeerToPeer.Server [peerURI] Default: PeerToPeer.Server amqp://guest:guest@localhost:5672
Command line:
PeerToPeer.Server [peerURI]
Default:
PeerToPeer.Server amqp://guest:guest@localhost:5672
PeerToPeer.Client, PeerToPeer.Server 示例调用
在一个窗口中运行 PeerToPeer.Server
在另一个窗口中,运行 PeerToPeer.Client。PeerToPeer.Client 发送消息服务器,并在收到响应时打印响应。
附录 C. 使用您的订阅 复制链接链接已复制到粘贴板!
AMQ 通过软件订阅提供。要管理您的订阅,请访问红帽客户门户中的帐户。
C.1. 访问您的帐户 复制链接链接已复制到粘贴板!
流程
- 转至 access.redhat.com。
- 如果您还没有帐户,请创建一个帐户。
- 登录到您的帐户。
C.2. 激活订阅 复制链接链接已复制到粘贴板!
流程
- 转至 access.redhat.com。
- 导航到 My Subscriptions。
- 导航到 激活订阅 并输入您的 16 位激活号。
C.3. 下载发行文件 复制链接链接已复制到粘贴板!
要访问 .zip、.tar.gz 和其他发布文件,请使用客户门户查找要下载的相关文件。如果您使用 RPM 软件包或 Red Hat Maven 存储库,则不需要这一步。
流程
- 打开浏览器并登录红帽客户门户网站 产品下载页面,网址为 access.redhat.com/downloads。
- 查找 INTEGRATION 目录中的红帽 AMQ 条目。
- 选择所需的 AMQ 产品。此时会打开 Software Downloads 页面。
- 单击组件的 Download 链接。
C.4. 为系统注册软件包 复制链接链接已复制到粘贴板!
要在 Red Hat Enterprise Linux 上安装此产品的 RPM 软件包,必须注册您的系统。如果您使用下载的发行文件,则不需要这一步。
流程
- 转至 access.redhat.com。
- 进入 Registration Assistant。
- 选择您的操作系统版本,再继续到下一页。
- 使用您的系统终端中列出的命令完成注册。
有关注册您的系统的更多信息,请参阅以下资源之一:
附录 D. 使用带有示例的 AMQ Broker 复制链接链接已复制到粘贴板!
AMQ .NET 示例需要一个正在运行的消息代理,队列名为 amq.topic
。使用以下步骤安装和启动代理并定义队列。
D.1. 安装代理 复制链接链接已复制到粘贴板!
按照 AMQ Broker 入门 中的说明 来安装代理 并创建代理实例。启用匿名访问。
以下流程将代理实例的位置称为 < broker-instance-dir>
。
D.2. 启动代理 复制链接链接已复制到粘贴板!
流程
使用
artemis run
命令启动代理。<broker-instance-dir>/bin/artemis run
$ <broker-instance-dir>/bin/artemis run
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查控制台输出,以查看启动期间记录的所有关键错误。代理日志服务器
现在在服务器就绪时处于实时
状态。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
D.3. 创建队列 复制链接链接已复制到粘贴板!
在新终端中,使用 artemis queue
命令创建名为 amq.topic
的队列。
<broker-instance-dir>/bin/artemis queue create --name amq.topic --address amq.topic --auto-create-address --anycast
$ <broker-instance-dir>/bin/artemis queue create --name amq.topic --address amq.topic --auto-create-address --anycast
系统将提示您回答一系列 yes 或没有问题。全部答案为 N
。
创建队列后,代理就可以与示例程序一起使用。
D.4. 停止代理 复制链接链接已复制到粘贴板!
运行完示例后,请使用 artemis stop
命令来停止代理。
<broker-instance-dir>/bin/artemis stop
$ <broker-instance-dir>/bin/artemis stop
更新于 2023-09-26