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

基于NET Framework使用阿里云AMQP

概述

消息队列 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、接收端测试情况
_

相关文章:

  • vim的基础操作
  • Apache访问日志记录用户的每一个请求
  • LVS负载均衡机制之LVS-DR模式工作原理以及简单配置
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • axios 或 ajax 请求文件
  • 重磅课程|《CNCF x Alibaba 云原生技术公开课》正式开讲!
  • proxy
  • java String补足
  • Kafka
  • 【嗅探底层】你知道Synchronized作用是同步加锁,可你知道它在JVM中是如何实现的吗?...
  • Android App性能优化技能,看这篇就够了
  • 花费上万转行当程序员,却找不到工作,程序员吐槽:这技术白学了
  • [PHP]实体类基类和序列化__sleep问题
  • Loj #2570. 「ZJOI2017」线段树
  • 我理解的CLH
  • [译]CSS 居中(Center)方法大合集
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • Apache Pulsar 2.1 重磅发布
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • ComponentOne 2017 V2版本正式发布
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Redis中的lru算法实现
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 设计模式走一遍---观察者模式
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 试着探索高并发下的系统架构面貌
  • 一个JAVA程序员成长之路分享
  • 优化 Vue 项目编译文件大小
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 湖北分布式智能数据采集方法有哪些?
  • ​HTTP与HTTPS:网络通信的安全卫士
  • # .NET Framework中使用命名管道进行进程间通信
  • #mysql 8.0 踩坑日记
  • $.each()与$(selector).each()
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (39)STM32——FLASH闪存
  • (C++17) std算法之执行策略 execution
  • (function(){})()的分步解析
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (四) 虚拟摄像头vivi体验
  • (转载)Google Chrome调试JS
  • (转载)Linux 多线程条件变量同步
  • (轉貼) UML中文FAQ (OO) (UML)
  • .NET 反射 Reflect
  • .NET使用存储过程实现对数据库的增删改查
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • /*在DataTable中更新、删除数据*/
  • @Autowired和@Resource的区别
  • @Service注解让spring找到你的Service bean
  • @开发者,一文搞懂什么是 C# 计时器!
  • []C/C++读取串口接收到的数据程序
  • [2010-8-30]
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [202209]mysql8.0 双主集群搭建 亲测可用