基于NET Framework使用阿里云AMQP

简介: 消息队列 AMQP 由阿里云消息队列(MQ)团队基于 AMQP 0.91 标准协议研发,完全兼容 RabbitMQ 开源社区,打造分布式、高吞吐、低延迟、高可扩展的云消息服务。用户可开箱即用,无需部署免运维,从而实现快速上云,阿里云提供全托管服务,更专业、更可靠、更安全。

概述

消息队列 AMQP 由阿里云消息队列(MQ)团队基于 AMQP 0.91 标准协议研发,完全兼容 RabbitMQ 开源社区,打造分布式、高吞吐、低延迟、高可扩展的云消息服务。用户可开箱即用,无需部署免运维,从而实现快速上云,阿里云提供全托管服务,更专业、更可靠、更安全。本文主要演示如何在NET Framework环境下使用阿里云AMQP服务。

使用

1、NuGet 安装 RabbitMQ.Client
_

2、使用的NET Framework版本为4.6.0
_

3、认证需要的工具类Utils参考链接

4、发送端示例代码

using System;
using System.Collections.Generic;
using System.Text;
using RabbitMQ.Client;
using System.Threading;
using RabbitMQ.Client.Exceptions;

namespace amqp_dotnetframework_demo
{
    class Program
    {
        static void Main(string[] args) { 

            //测试队列的名称
            string QueueName = "helloworldqueue";

            var factory = new ConnectionFactory();
            /*接入点*/
            factory.HostName = "********";
            /*阿里云的accessKey*/
            factory.UserName = "********";
            /*阿里云的accessSecret*/
            factory.Password = "********";
            //虚拟主机的名称,需要提前在管理门户创建
            factory.VirtualHost = "********"; 
            /*默认端口*/
            factory.Port = 5672;
            factory.AuthMechanisms = new List<AuthMechanismFactory>() { new AliyunMechanismFactory() };
            factory.TopologyRecoveryEnabled = true;

            ConnectionFactory rabbitMqFactory = factory;

            // 发送消息测试
            var connection = factory.CreateConnection();
            var channel = connection.CreateModel();
            channel.QueueDeclare(queue: QueueName, durable: false, exclusive: false, autoDelete: false, arguments: null);
            while (true)
            {
                try
                {
                    if (!connection.IsOpen)
                    {
                        connection.Close();
                        connection = factory.CreateConnection();
                        channel = connection.CreateModel();
                    }
                    string message = Guid.NewGuid().ToString();
                    var body = Encoding.UTF8.GetBytes(message);

                    channel.BasicPublish(exchange: "", routingKey: QueueName, basicProperties: null, body: body);
                    Console.WriteLine(" [x] Sent {0}", message);
                    Thread.Sleep(1000);
                }
                catch (BrokerUnreachableException e)
                {
                    Thread.Sleep(3000);
                    Console.WriteLine(e);
                    continue;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    continue;
                }
            }
            Console.ReadKey();
        }
    }
}

5、接收端示例代码

using System;
using System.Collections.Generic;
using System.Text;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;

namespace amqp_dotnetframework_demo
{
    class Program
    {
        static void Main(string[] args) { 

            //测试队列的名称
            string QueueName = "helloworldqueue";

            var factory = new ConnectionFactory();
            /*接入点*/
            factory.HostName = "********";
            /*阿里云的accessKey*/
            factory.UserName = "********";
            /*阿里云的accessSecret*/
            factory.Password = "********";
            //虚拟主机的名称,需要提前在管理门户创建
            factory.VirtualHost = "********"; 
            /*默认端口*/
            factory.Port = 5672;
            factory.AuthMechanisms = new List<AuthMechanismFactory>() { new AliyunMechanismFactory() };
            factory.TopologyRecoveryEnabled = true;

            ConnectionFactory rabbitMqFactory = factory;

            // 消费消息测试
            using (var connection = rabbitMqFactory.CreateConnection())
            using (var channel = connection.CreateModel())
            {
                //channel.QueueDeclare(queue: "queueNewDemo", durable: true, exclusive: false, autoDelete: false, arguments: null);

                var consumer = new EventingBasicConsumer(channel);
                consumer.Received += (model, ea) =>
                {
                    var body = ea.Body;
                    var message = Encoding.UTF8.GetString(body);
                    Console.WriteLine(" [x] Received {0}", message);
                };
                channel.BasicConsume(queue: QueueName, autoAck: true, consumer: consumer);

                Console.WriteLine(" Press [enter] to exit.");
                Console.ReadLine();
            }

            Console.ReadKey();
        }
    }
}

6、接收端测试情况
_

相关实践学习
消息队列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
相关文章
|
2月前
使用的是.NET Framework 4.0,并且需要使用SMTP协议发送电子邮件
使用的是.NET Framework 4.0,并且需要使用SMTP协议发送电子邮件
57 1
|
2月前
|
开发框架 缓存 监控
NET Framework 到 .NET 5/6 的迁移是重大的升级
本文详细介绍了从 .NET Framework 4.8 迁移到 .NET 5/6 的过程,通过具体案例分析了迁移策略与最佳实践,包括技术栈评估、代码迁移、依赖项更新及数据库访问层的调整,强调了分阶段迁移、保持代码可维护性及性能监控的重要性。
62 3
|
2月前
|
机器学习/深度学习 编解码 算法
【小样本图像分割-4】nnU-Net: Self-adapting Framework for U-Net-Based Medical Image Segmentation
《nnU-Net: 自适应框架用于基于U-Net的医学图像分割》是一篇2018年的论文,发表在Nature上。该研究提出了一种自适应的医学图像分割框架nnU-Net,能够自动调整模型的超参数以适应不同的数据集。通过2D和3D U-Net及级联U-Net的组合,nnU-Net在10个医学分割数据集上取得了卓越的性能,无需手动调整。该方法强调数据增强、预处理和训练策略等技巧,为医学图像分割提供了一个强大的解决方案。
103 0
【小样本图像分割-4】nnU-Net: Self-adapting Framework for U-Net-Based Medical Image Segmentation
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
本文讨论了在基于.NET 6和.NET Framework的WinForms项目中添加图表控件的不同方法。由于.NET 6的WinForms项目默认不包含Chart控件,可以通过NuGet包管理器安装如ScottPlot等图表插件。而对于基于.NET Framework的WinForms项目,Chart控件是默认存在的,也可以通过NuGet安装额外的图表插件,例如LiveCharts。文中提供了通过NuGet添加图表控件的步骤和截图说明。
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
|
2月前
|
API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
41 0
|
4月前
|
开发框架 缓存 前端开发
实战.NET Framework 迁移到 .NET 5/6
从.NET Framework 迁移到.NET 5/6 是一次重要的技术革新,涵盖开发环境与应用架构的全面升级。本文通过具体案例详细解析迁移流程,包括评估现有应用、利用.NET Portability Analyzer 工具识别可移植代码、创建新项目、逐步迁移代码及处理依赖项更新等关键步骤。特别关注命名空间调整、JSON 序列化工具更换及数据库访问层重构等内容,旨在帮助开发者掌握最佳实践,确保迁移过程平稳高效,同时提升应用性能与可维护性。
157 2
|
4月前
|
开发框架 JSON 监控
实战指南:从 .NET Framework 迁移到 .NET 5/6 的策略与最佳实践
【8月更文挑战第28天】从 .NET Framework 迁移到 .NET 5/6 是一次重要的技术升级,涉及开发环境与应用架构的改进。本文通过具体案例分析,介绍迁移策略与最佳实践,帮助开发者顺利完成转变。
95 1
|
4月前
|
缓存 运维 前端开发
阿里云云效操作报错合集之如何解决在使用流水线构建net8应用时遇到无法构建的报错
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
4月前
|
缓存 程序员
封装一个给 .NET Framework 用的内存缓存帮助类
封装一个给 .NET Framework 用的内存缓存帮助类
|
4月前
|
XML JSON 程序员
总结一下 .NET FrameWork 和 .NET Core 创建的项目的不同点
总结一下 .NET FrameWork 和 .NET Core 创建的项目的不同点
111 0