首页 > 其他分享 >.NET使用RabbitMQ发送消息

.NET使用RabbitMQ发送消息

时间:2024-08-01 17:52:52浏览次数:19  
标签:string Appsettings app RabbitMQ 发送 new NET channel

using RabbitMQ.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Common
{
    public class RabbitMQSender
    {
        private static RabbitMQSender instance;
        private static IConnection connection;
        private static IModel channel;
        // 交换机
        private readonly static string ExchangeName = Appsettings.app(new string[] { "RabbitMQ", "QueueBase", "Exchange" });
        // 队列
        private readonly static string QueueName = Appsettings.app(new string[] { "RabbitMQ", "QueueBase", "Queue" });


        private RabbitMQSender()
        {
            // 初始化MQ连接
            var factory = new ConnectionFactory()       // 创建连接工厂对象
            {
                HostName = Appsettings.app(new string[] { "RabbitMQ", "RabbitConnect", "HostName" }),
                Port = Appsettings.app(new string[] { "RabbitMQ", "RabbitConnect", "Port" }).ObjToInt(),
                UserName = Appsettings.app(new string[] { "RabbitMQ", "RabbitConnect", "UserName" }),
                Password = Appsettings.app(new string[] { "RabbitMQ", "RabbitConnect", "Password" }),
                VirtualHost = Appsettings.app(new string[] { "RabbitMQ", "RabbitConnect", "VirtualHost" }),
           
            }; // 设置RabbitMQ服务器地址
            connection = factory.CreateConnection();    // 创建连接对象
            channel = connection.CreateModel();         // 创建连接会话对象
            //channel.ExchangeDeclare(ExchangeName, "direct", false, false, null);
        }
        public static RabbitMQSender Instance
        {
            get
            {
                if (instance == null)
                {
                    instance = new RabbitMQSender();
                }
                return instance;
            }
        }
        public void PublishMessage(string message)
        {
            if (string.IsNullOrEmpty(message))
                return;
            try
            {
                // 消息内容
                var body = Encoding.UTF8.GetBytes(message);
                IBasicProperties basicProperties = channel.CreateBasicProperties();
                basicProperties.DeliveryMode = 2;   // 持久化
                // 发送消息
                channel.BasicPublish(exchange: ExchangeName, routingKey: QueueName, true, basicProperties: basicProperties, body: body);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"publishing message to RabbitMQ error.ErrorMessage:【{ex.Message}】,PushMessage:【{message}】");throw;
            }
        }

        public void Dispose()
        {
            if (channel != null)
            {
                channel.Close();
                channel.Dispose();
            }
            if (connection != null)
            {
                connection.Close();
                connection.Dispose();
            }
        }
    }
}

 

// 使用
var rabbitMQ = RabbitMQSender.Instance;
rabbitMQ.PublishMessage(message + i);

 

配置

 "RabbitMQ": {
    "RabbitConnect": {
      "HostName": "XX.XX.XX.XXX", // 主机名称 IP
      "Port": 5672, // 主机端口
      "VirtualHost": "/",
      "UserName": "admin", // 连接账号
      "Password": "admin" // 连接密码
    },
    "QueueBase": {
      "Exchange": "confirm.exchange", // 交换机名称
      "Queue": "confirm.queue", // 队列名称
      "ExchangeType": "direct" // 交换机类型 direct、fanout、headers、topic 必须小写
    }
  },

  

 

标签:string,Appsettings,app,RabbitMQ,发送,new,NET,channel
From: https://www.cnblogs.com/chocolatexll/p/18337177

相关文章

  • 合宙air780E解决适配ws2812b灯带发送错误问题
    最近使用合宙air780E通过gpio口直驱ws2812b灯带,使用luatos开发,系统自带外设库sensor.ws2812b(pin,data,T0H,T0L,T1H,T1L) 详细接口文档见官方文档:luatos接口外设库文档上测试代码:--led灯条展示localthis={}localgpioId=24--输出gpio引脚localtimeDelay=2000-......
  • net use的用法和如何防止重连
    netuse命令用于建立、显示或断开与网络资源的连接。以下是netuse命令的一些基本用法和参数说明:防止重连,可以在连接时使用不保存的参数(/persistent:no),或者netuseZ:/delete 基本语法Bash深色版本1netuse[device][\\computername\sharename[password|*][us......
  • 使用 Python 生产者和消费者在 Kubernetes minikube 上设置 Kafka Kraft
    我正在尝试从kubernetes集群外部连接到kubernetesminikubekafkapod。服务器启动没有任何问题,但我无法设法将本地kafka生产者/消费者连接到外部kafkapod。在集群内的kafka服务器映像上,我将bootstrap-server设置为:bin/kafka-topics.sh--create--bootst......
  • Tensorflow 对象检测 API Mobilenet SSD 输入图像大小错误
    我正在尝试使用MobileNetSSDv1fpn640x640使用Tensorflow对象检测API来实现对象检测算法。但我的输入图像大小为1024x25。但是当我运行训练脚本时,它给出了类似“输入尺寸必须大于33”的错误。我想知道使用MobilenetSSD时与输入图像大小相关的约束是什么,以及是......
  • 基于 KubeSphere 的 Kubernetes 生产环境部署架构设计及成本分析
    转载:基于KubeSphere的Kubernetes生产环境部署架构设计及成本分析 前言导图1.简介1.1架构概要说明今天分享一个实际小规模生产环境部署架构设计的案例,该架构设计概要说明如下:本架构设计适用于中小规模(<=50)的Kubernetes生产环境,大型环境没有经验,有待验证。......
  • rabbitmq单节点部署
    一:前置条件需要安装erlang#注意安装方式需要科学网络,不适用于离线安装1:配置erlang安装条件curl-shttps://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh|sudobash2:安装erlangyuminstall-yerlang3:检查erlang版本erl-v二:安装RabbitMQ1......
  • Http发送Post请求 form-data 和 application/x-www-form-urlencoded 区别
    在HTTP协议中,使用POST请求时,可以通过不同的方式发送表单数据。form-data 和 application/x-www-form-urlencoded是两种常见的编码方式,它们在发送数据时有一些关键的区别:application/x-www-form-urlencoded编码方式:以键值对的形式进行编码,每个键值对之间用&符号连接,每个键和值......
  • 1、.Net UI框架:UWP - .Net宣传系列文章
    UWP(UniversalWindowsPlatform)是微软推出的一种应用程序开发平台,它允许开发者创建能够在各种Windows10设备上运行的应用程序,包括PC、平板、手机、Xbox、HoloLens等。UWP是Windows10操作系统的核心组件之一,它提供了统一的API和开发工具,使得开发者能够编写一次代码,然后在多个......
  • .NET程序集编辑神器 dnSpy 使用介绍
    原文链接:https://www.cnblogs.com/zhaotianff/p/17352882.htmldnSpydnSpy是一个.NET程序集调试器和编辑器。它可以用它来编辑和调试程序集,即使在没有源码的情况下。主要功能:调试.NET和Unity程序集编辑.NET和Unity程序集 项目地址:https://github.com/dnSpy/dnSpy直接......
  • 在生产中使用 Djoser 和 Django 发送电子邮件时出现“504 网关超时”
    当我使用Djoser进行用户注册和登录管理时,我在Django生产环境中遇到问题。当用户请求创建帐户时,API需要大约一分钟的时间,然后返回504GatewayTime-out错误。在我的本地环境中,该过程正常工作,并且发送激活电子邮件没有任何问题。我尝试过的:增加......