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

.net使用RabbitMQ小记

使用RabbitMQ的优点

        1.性能全面,rabbitmq性能比较全面,是消息中间件的首选

        2.高并发,rabbitmq实现语言是天生就具备高并发高可用的erlang语言

        3.任务异步处理,将不需要同步处理的并且耗时长的操作由消息队列通知消息接受方进行异步处理,提高了应用程序的响应时间

        4.应用解耦,MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程序进行解耦

核心API接口和类

IModel:表示一个AMQP 通道,并提供大多数的操作

IConnection:表示一个AMQP连接

ConnectionFactory::构造一个IConnection实例

IBasicConsumer:表示一个消息消费者

DefaultBasicConsumer:消费者常用的基类

限制

客户端并不支持无符号64位整型(ulong),但支持有符号64位整型

使用简介

命名空间引用

using RabbitMQ.Client;

连接到RabbitMQ

ConnectionFactory factory = new ConnectionFactory();
factory.UserName = user;
factory.Password = pass;
factory.VirtualHost = vhost;
factory.HostName = hostName;

IConnection conn = factory.CreateConnection();

打开一个通道

IModel channel = conn.CreateModel();

断开连接  

channel.close();

conn.close();

关闭连接后,通道也会自动释放掉

connection 是一个长连接,底层协议针对长连接做了优化,这意味着打开一个新的连接将会有巨大的开销。channel 也是长连接,新建通道的开销会小很多,一般情况下,建议通道也复用,不要重复新建。

设置客户端名称(方便识别多个客户端,强烈建议设置)

factory.ClientProvidedName = "app:audit component:event-consumer";

定义交换机和队列,并绑定

channel.ExchangeDeclare(exchangeName, ExchangeType.Direct);
channel.QueueDeclare(queueName, false, false, false, null);
channel.QueueBind(queueName, exchangeName, routingKey, null);

直接删除

channel.QueueDelete("queue-name", false, false);

删除队列,如果为空

channel.QueueDelete("queue-name", false, true);

删除队列,如果没有使用(没有任何消费者)

channel.QueueDelete("queue-name", false, true);

删除队列并清除消息

channel.QueueDelete("queue-name");

发布消息

byte[] messageBodyBytes = System.Text.Encoding.UTF8.GetBytes("Hello, world!");
channel.BasicPublish(exchangeName, routingKey, null, messageBodyBytes);

对发布消息进行精细控制

byte[] messageBodyBytes = System.Text.Encoding.UTF8.GetBytes("Hello, world!");
IBasicProperties props = channel.CreateBasicProperties();
props.ContentType = "text/plain";
props.DeliveryMode = 2;
channel.BasicPublish(exchangeName, routingKey, props, messageBodyBytes);

发布消息并带有header 参数

byte[] messageBodyBytes = System.Text.Encoding.UTF8.GetBytes("Hello, world!");

IBasicProperties props = channel.CreateBasicProperties();
props.ContentType = "text/plain";
props.DeliveryMode = 2;
props.Headers = new Dictionary<string, object>();
props.Headers.Add("latitude",  51.5252949);
props.Headers.Add("longitude", -0.0905493);

channel.BasicPublish(exchangeName, routingKey, props, messageBodyBytes);

发布消息带有截至时间

byte[] messageBodyBytes = System.Text.Encoding.UTF8.GetBytes("Hello, world!");

IBasicProperties props = channel.CreateBasicProperties();
props.ContentType = "text/plain";
props.DeliveryMode = 2;
props.Expiration = "36000000";

channel.BasicPublish(exchangeName, routingKey, props, messageBodyBytes);

订阅消息

var consumer = new EventingBasicConsumer(channel);
consumer.Received += (ch, ea) =>
                {
                    var body = ea.Body.ToArray();
                    // copy or deserialise the payload
                    // and process the message
                    // ...
                    channel.BasicAck(ea.DeliveryTag, false);
                };
string consumerTag = channel.BasicConsume(queueName, false, consumer);

启动自动重连

factory.AutomaticRecoveryEnabled = true;

//默认重连时间5秒,这里设置为10s

factory.NetworkRecoveryInterval = TimeSpan.FromSeconds(10);

相关文章:

.net使用RabbitMQ小记

使用RabbitMQ的优点 1.性能全面&#xff0c;rabbitmq性能比较全面&#xff0c;是消息中间件的首选 2.高并发&#xff0c;rabbitmq实现语言是天生就具备高并发高可用的erlang语言 3.任务异步处理&#xff0c;将不需要同步处理的并且耗时长的操作由消息队列通知消息接受方进行异步…...

layUI 中 穿梭框无法获取值的细节问题

初始化的时候一定要指定id&#xff0c;不然就会出现无法调用 获得右侧数据和实例重载的方法...

Kaggle回归问题Mercedes——Benz Greener Manufacturing

目录 前言1 题目介绍2 数据清洗3 数据可视化分析4 模型训练5 源码 前言 这是我在大三选修课的课程设计&#xff0c;内容参考了Kaggle上高赞的代码&#xff0c;有详细批注&#xff0c;整体比较基础&#xff0c;结构相对完整&#xff0c;便于初学者学习。这个是一个回归问题&…...

天润融通「微藤大语言模型平台2.0」以知识驱动企业高速增长

8月23日&#xff0c;天润融通&#xff08;又称“天润云”,2167.HK&#xff09;&#xff0c;正式发布「微藤大语言模型平台2.0」。 “大模型企业知识企业知识工程”。 “不能有效记录和管理知识的企业是不能持续进步的。在企业的生产流程中&#xff0c;相比于其他场景&#xff0…...

【BUG】解决安装oracle11g或12C中无法访问临时位置的问题

项目场景&#xff1a; 安装oracle时&#xff0c;到第二步出现oracle11g或12C中无法访问临时位置的问题。 解决方案&#xff1a; 针对客户端安装&#xff0c;在cmd中执行命令&#xff1a;前面加实际路径setup.exe -ignorePrereq -J"-Doracle.install.client.validate.cli…...

2. 使用IDEA创建Spring Boot Hello项目并管理依赖——Maven入门指南

前言&#xff1a;本文将介绍如何使用IDEA创建一个Spring Boot Hello项目&#xff0c;并通过Maven来管理项目的依赖。我们从项目的创建到代码的编写&#xff0c;再到项目的构建和运行&#xff0c;一步步演示了整个过程。 &#x1f680; 作者简介&#xff1a;作为某云服务提供商的…...

Python在电路课程中的应用

1 需求 课程中有大量的计算&#xff0c;电路方程、复数计算&#xff0c;之前都是用的MATLAB online&#xff0c;可现在要过期了&#xff0c;只能更换平台。 2 工具 https://www.online-python.com/ Python3 在线工具 | 菜鸟工具 (runoob.com) 3 Sinusoid 章节 涉及到复数计…...

Spark SQL join的三种实现方式

引言 join是SQL中的常用操作&#xff0c;良好的表结构能够将数据分散到不同的表中&#xff0c;使其符合某种规范(mysql三大范式)&#xff0c;可以最大程度的减少数据冗余&#xff0c;更新容错等&#xff0c;而建立表和表之间关系的最佳方式就是join操作。 对于Spark来说有3种…...

wazuh环境配置和漏洞复现

1.wazuh配置 虚拟机 &#xff08;OVA&#xff09; - 替代安装 (wazuh.com)在官方网页安装ova文件 打开VMware选择打开虚拟机&#xff0c;把下载好的ova文件放入在设置网络改为NAT模式 账号:wazuh-user 密码:wazuh ip a 查看ip 启动小皮 远程连接 账号admin …...

九五从零开始的运维之路(其三十六)

文章目录 前言一、集群概述1.负载均衡技术类型&#xff08;一&#xff09;四层负载均衡器&#xff08;二&#xff09;七层负载均衡器 2.负载均衡实现方式&#xff08;一&#xff09;硬件负载均衡产品&#xff1a;&#xff08;二&#xff09;软件负载均衡产品&#xff1a; 二、L…...

同步和异步有什么区别,使用场景?

同步(Synchronous)和异步(Asynchronous)是用于描述不同的操作和通信模式的术语。它们在处理任务、执行代码以及处理通信时有很大的异同。 同步(Synchronous) 同步操作是指程序的执行顺序按照代码的先后顺序进行,一个操作完成后才能执行下一个操作。在同步操作中,调用一…...

webassembly009 transformers.js 网页端侧推理

之前试用过两个网页端的神经网络框架&#xff0c;一个是 Tensorflow PlayGround&#xff0c;它相当与实现了一个网页端的简单的训练框架&#xff0c;有关节点的数据结构可看这篇。另一个是onnx的网页端(nodejs绿色免安装try onnx on web(chrome))&#xff0c;需要自己转换onnx模…...

Android动态添加和删除控件/布局

一、引言 最近在研究RecyclerView二级列表的使用方法&#xff0c;需要实现的效果如下。 然后查了一些博客&#xff0c;觉得实现方式太过复杂&#xff0c;而且这种方式也不是特别受推荐&#xff0c;所以请教了别人&#xff0c;得到了一种感觉还不错的实现方式。实现的思路为&…...

maven下载不了仓库地址为https的依赖jar,配置参数忽略ssl安全检查

问题原因 私服使用的https地址&#xff0c;然后安全证书过期的或没有&#xff0c;使用maven命令时&#xff0c;可以添加以下参数&#xff0c;忽略安全检查 mvn -Dmaven.wagon.http.ssl.insecuretrue -Dmaven.wagon.http.ssl.allowalltrue -Dmaven.wagon.http.ssl.ignore.vali…...

3.Redis 单线程模型

redis 单线程模型 redis 只使用一个线程来处理所有的命令请求&#xff0c;并不是说一个 redis 服务器进程内部真的就只有一个线程&#xff0c;其实也有多个线程&#xff0c;多个线程是再处理网络 IO。 那么在多线程中&#xff0c;针对类似于这样的场景两个线程尝试同时对一个…...

0基础学习VR全景平台篇 第90篇:智慧眼-数据统计

【数据统计】是按不同条件去统计整个智慧眼项目中的热点&#xff0c;共包含四大块&#xff0c;分别是数据统计、分类热点、待审核、回收站&#xff0c;下面我们来逐一进行介绍。 1、数据统计 ① 可以按所属分类、场景分组、所属场景、热点类型以及输入热点名去筛选对应的热点&…...

【Go】Goland项目配置运行教程

Golang项目配置运行教程 1.安装Golang下载安装包安装 2.Goland配置2.1 环境2.2 goland配置2.2.1 没有makefile的情况2.2.2 有makefile的情况 3.跨平台项目4.补充 注意&#xff0c;本项目描述的是git clone下来的Golang项目配置运行教程&#xff0c;并不是从头创建一个Golang项目…...

Docker容器与虚拟化技术:Docker consul 实现服务注册与发现

目录 一、理论 1.Docker consul 二、实验 1.consul部署 2. consul-template部署 三、总结 一、理论 1.Docker consul &#xff08;1&#xff09;服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的&#xff0c;不保障高可用性&…...

【大模型AIGC系列课程 2-2】大语言模型的“第二大脑”

1. 大型语言模型的不足之处 很多人使用OpenAI提供的GPT系列模型时都反馈效果不佳。其中一个主要问题是它无法回答一些简单的问题。 ● 可控性:当我们用中文问AI一些关于事实的问题时,它很容易编造虚假答案。 ● 实时性:而当你询问它最近发生的新闻事件时,它会干脆地告诉你…...

Java基础数据结构

二叉查找树 二叉查找树&#xff0c;又称二叉树或者二叉搜索树 特点&#xff1a;每一个节点上最多又两个子节点 任意节点左子树上的值都小于当前节点 任意节点右子树上的值都大于当前节点 二叉查找树添加节点&#xff1a;规则 小的存左边 大的存右边 一样的不存 平衡二叉树&am…...

PP-TS基于启发式搜索和集成方法的时序预测模型,使预测更加准确

时间序列数据在各行业和领域中无处不在&#xff0c;如物联网传感器的测量结果、每小时的销售额业绩、金融领域的股票价格等等&#xff0c;都是时间序列数据的例子。时间序列预测就是运用历史的多维数据进行统计分析&#xff0c;推测出事物未来的发展趋势。 为加快企业智能化转…...

vue 04-reactive与ref的选择

reactive与re两者区别&#xff1f; reactive可以转换对象成为响应式数据对象,但是不支持简单数据类型 ref可以转换简单数据类型为响应式数据对象,也支持复杂数据类型,但是操作的时候需要.value 推荐使用的话: 如果能确定数据是对象且字段名称也确定,可以使用reactive转成响应式…...

Mysql索引+事务+存储引擎

索引 索引的概念 索引是一个排序的列表&#xff0c;在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址&#xff08;类似于C语言的链表通过指针指向数据记录的内存地址&#xff09;。 使用索引后可以不用扫描全表来定位某行的数据&#xff0c;而是先通过索引表找…...

创建abp vnext项目

需求&#xff1a; 1.使用net core跨平台的方式支持windows和centos系统&#xff1b; 2.实现前后端分离部署 3.框架默认集成用户登录、权限、redis等模块 4.支持多种数据库的方式 5.前端使用vue&#xff0c;不需要使用框架自带的web 1.框架配置官网地址&#xff1a; https://ab…...

【OpenCV实战】3.OpenCV颜色空间实战

OpenCV颜色空间实战 〇、Coding实战内容一、imread1.1 函数介绍1.2 Flags1.3 Code 二. 色彩空间2.1 获取单色空间2.2. HSV、YUV、RGB2.3. 不同颜色空间应用场景 〇、Coding实战内容 OpenCV imread()方法不同的flags差异性获取单色通道【R通道、G通道、B通道】HSV、YUV、RGB 一…...

什么是回调函数(callback function)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 回调函数&#xff08;Callback Function&#xff09;⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这…...

零售再增长,直播登“C位”,美团稳稳交出成绩单

8月24日&#xff0c;美团发布2023年中期业绩和二季报&#xff0c;财报显示其二季度实现营收680亿元&#xff0c;同比增长33.4%&#xff1b;实现净利润47.13亿元&#xff0c;同比扭亏为盈&#xff0c;调整后净利润达历史最高水平。其中&#xff0c;与消费市场走势息息相关的美团…...

什么是需求可追溯性,为什么它对产品团队很重要?

随着产品变得越来越复杂&#xff0c;需求在开发过程中将在各个部门和利益相关方之间不断传递。可追溯性能帮助产品团队解决他们在需求管理过程中面临的一大挑战。 目前产品开发需要做出的决策比以往任何时候都多&#xff0c;每一种决策都需要充分考虑对具体需求和整体产品的影…...

Window基础命令

文章目录 查看哪些端口被禁用TCP协议删除开机启动项方案1方案2 查看哪些端口被禁用TCP协议 netsh interface ipv4 show excludedportrange protocoltcp删除开机启动项 方案1 列出所有启动项 bcdedit /enum仔细看你要删除的是哪一项&#xff08;看description&#xff09;&a…...

Java List的扩容机制原理及应用

Java List的扩容机制原理及应用 引言 在Java中&#xff0c;List是一种非常常用的数据结构&#xff0c;用于存储有序的元素集合。List的底层实现有多种&#xff0c;如ArrayList、LinkedList等。在使用List时&#xff0c;我们经常会遇到一个问题&#xff1a;当元素数量超过了Li…...

网站设计网页主页介绍/独立站建站平台

JSON.stringify() 转JSON字符串 JSON.parse() 转JSON对象...

香港外贸网站建设/个人推广app的妙招

find命令简介&#xff1a; 实时、精确、支持众多查找标准遍历指定目录中的所有文件完成查找&#xff0c;速度慢&#xff1b;1&#xff0e;命令格式&#xff1a;locate filename 直接跟需要查找的文件 eg locate passwd 系统文件数据库中所有包含passwd的文件。find 查找路径…...

建站推广哪里有建站新闻资讯/友情链接站长平台

Python格式化输出的方法要使用 格式化字符串字面值 &#xff0c;请在字符串的开始引号或三引号之前加上一个 f 或 F 。在此字符串中&#xff0c;你可以在 { 和 } 字符之间写可以引用的变量或字面值的 Python 表达式。>>> yes_votes 42_572_654>>> no_votes …...

手机网页下载的文件在哪里找/成都网络优化托管公司

2019独角兽企业重金招聘Python工程师标准>>> 欢迎和大家交流技术相关问题&#xff1a; 邮箱: jiangxinnju163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://github.com/jiangxincode 知乎地址: https://www.zhihu.com/people/jiangxinn…...

海南seo外包/搜索引擎优化

转载于&#xff1a;https://blog.csdn.net/prokgtfy9n18/article/details/68962512 在数组运算前&#xff0c;先了解一下数组的解引用到底是怎么回事。 #include <windows.h>#include <stdio.h>int main(){int arr[] {1,2,3,4,5,6,7,8,9,0};printf("%d\n&quo…...

怎么做网站的导航/seo免费浏览网站

3、在解决方案的资源管理器中右键你的EyreFree.cpp文件 -> 属性 -> 找到预编译头 -> 在预编译头中选择不适用预编译头。同时去 stdafx.h 头文件中将【#define WIN32_LEAN_AND_MEAN】该句代码注释掉或删掉。4、将 C:\Program Files (x86)\Java\jdk1.7.0_17\include (JD…...