如何从消息队列中删除消息(仅当其格式正确时)?

2023-11-29

我想从一个队列中获取消息并将其发送到数据库。我只想在特定格式下才这样做。

如果我使用Receive直接调用方法,访问时出现异常Body的消息,我失去了消息,因为Receive的方法MessageQueue从队列中删除消息。

为了避免丢失消息,现在我首先Peek消息,如果格式正确,我会使用Receive方法将其从队列中删除以将其发送到数据库。

我写的代码是这样的:

 Message msg = _queue.Peek(new TimeSpan(0, 0, LoggingService.Configuration.ReceiveTimeout));

// LogMessage is my own class which is adding some more stuff to original message from MessageQueue                
LogMessage message = null;

                if (msg != null)
                {
                    if (!(msg.Formatter is BinaryMessageFormatter))
                        msg.Formatter = new BinaryMessageFormatter();

                    message = LogMessage.GetLogMessageFromFormattedString((string) msg.Body);

                    // Use Receive method to remove the message from queue. This line will we executed only if the above line does not
                    // throw any exception i.e. if msg.Body does not have any problem
                    Message wellFormattedMsg =
                         _queue.ReceiveById(msg.Id);

                      SendMessageToDatabase(message);
                }

先用Peek,再用Receive,这个逻辑对吗?或者还有其他更好的方法来实现同样的目标吗?请注意,我不想一次收到所有消息。 MessageQueue 是非事务性的。


这与我每次手动将一条消息出队时所采用的方法相同,并且我没有遇到任何问题。

您似乎没有处理的一件事是如何处理队列上不具有所需格式的消息。您打算将其留在队列中吗?如果是这样,您最终可能会得到一个非常大的队列,并且在查看队列中尚未预期的消息时会遇到各种问题。如果无法删除这些消息,则将那些不具有所需格式的消息也出队并将它们存储在其他地方似乎更有意义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从消息队列中删除消息(仅当其格式正确时)? 的相关文章

随机推荐

  • AttachConsole 的实际最低版本要求是什么?

    在线 PSDK 文档指出 5 1 WinXP 要编译使用此函数的应用程序 请定义 WIN32 WINNT 如 0x0501 或更高版本 有关详细信息 请参阅使用 Windows 标头 要求 最低支持客户端 Windows XP 仅限桌面应用
  • 读取刚刚打开的SerialPort时只读取到一个字节

    奇怪的问题 当我从 com port 读取时SerialPort Read 那么如果数据到达 第一次调用时仅读取一个字节 忽略count参数和超时内可用的字节数 所有进一步的阅读都可以 只有第一个有问题 Using SerialPort D
  • 关键字不支持数据源

    我有一个带有默认成员资格数据库的 ASP NET MVC 应用程序 我通过 ADO NET 实体框架访问它 现在我想将其移至IIS 但出现了一些问题 我必须安装 SQL Server Management Studio 创建新数据库 导入之
  • 更改活动导航栏的颜色

    我正在使用一个简单的引导顶部固定导航栏 我想更改活动页面的颜色 但是我认为我的代码中缺少某些内容 div class navbar div class navbar fixed top div class container style w
  • 如何使用 Glide 获取 imageview 上的 URI

    我正在使用 Glide 将图像从服务器加载到 ImageView 我想知道是否可以从 imageview 本身中提取该 URI ImageView contentImage ImageView findViewById R id conte
  • 使用 tdbquery 查询 TDB 中的命名 RDF 图

    我正在尝试使用 tdbquery 程序查询新创建的 TDB 数据库 但是 我很难编写针对正确命名图的查询 我正在做以下事情 首先创建一个新数据集并添加一个名为 facts 的名称图 Dataset dataset TDBFactory cr
  • 我应该释放使用字符串文字初始化的 char* 吗?

    我应该自由吗char 使用字符串文字初始化变量时 对我来说 语法会让我假设它们只是堆栈分配的 但这个例子告诉我 它们不是 include
  • 如何foreach具有键值的多维数组

    我有一个带有键值的多维数组 我想循环该数组中的数据 但我不知道如何 这是我的数组 myArray Array 134 gt Array 1138 gt Array id gt 1138 qty gt 1 price gt 4900000 n
  • x64 汇编函数(调用/返回与推送/弹出/跳转)

    使用内置调用和返回指令与手动压入和弹出堆栈以及使用函数跳转之间有什么区别 从功能上讲 如果你做得正确 什么也没有 然而 它需要更多的指令和 或寄存器来模拟call ret using push pop 当然如果你真的想发挥到极致 你也可以效
  • 如何显示 JQPLOT 图形而不是长文本

    我在控制器类中有一个返回 JSON 数据的方法 public ActionResult ChartDataJSON Chart chart new Chart DataSet ds dbLayer GetChartData DataTabl
  • D3js 代码在调用两次时会复制图表而不是刷新

    这是我的 D3js 代码 function ShowGraph data var w 600 h 600 padding 36 p 31 barwidth 1 var bar height d3 scale linear domain d3
  • git分支工作流程策略

    我是 git 的新手 对 Git 有一点了解 我公司目前有1个方案 该方案分为5个产品 每个产品由不同的团队处理 目前我公司 git 有 5 个分支机构 例如 dev 该分支供开发人员构建程序 dev program com test al
  • 在 jsdom 加载的脚本中设置全局变量

    我正在尝试在 Node js 中运行一些浏览器代码以简化测试 deasync就是这个原因 目前 我使用jsdom解析唯一的html文件 起初 我试图让它也加载脚本 这些脚本链接在
  • 从文本文件中获取数据并将其显示在html表格中

    我为每一行都有一个这种模式的文本文件 Username Score 我正在尝试以此创建一个记分板 这是我的尝试 table width 200 border 1 tr td width 85 Nom td td width 99 Score
  • 如何循环访问 For 循环容器中以数字形式存储的日期值?

    我有一个For Loop Container使用日期作为InitExpression 加载日期 但该值采用数字格式 20120229 我需要这种方式 因为我无法修改它 现在 我想设置AssingExpression值以这样的方式 加载日期变
  • Oracle SQL相关更新

    我有三张桌子 t1 columns a c t2 columns a b t3 columns b c d 现在我想要的是用 t3 d 更新 t1 c 但我不能只使用 t1 c t3 c 从 t3 更新 t1 我还必须遍历 t3 b t2
  • 从 google apps 脚本发送 iso-8859-1 字符

    我正在尝试调用从谷歌应用程序脚本发送短信的服务 该服务需要 ISO 8859 1 格式的数据 下面的代码发送一条消息 其中 为坏字符 function sendSMS var doc SpreadsheetApp getActiveSpre
  • 列表上的 Groovy 点表示法

    我不明白 Groovy 中以下构造的目的 每当你有一些东西的集合时 就调用它items 您只需访问集合上的属性即可映射该属性 即 items prop items collect it prop 这对我来说看起来很奇怪 因为我认为第一个符号
  • 警告:mysqli::mysqli():(HY000/1045):[重复]中的用户“database”@“localhost”(使用密码:NO)访问被拒绝

    这个问题在这里已经有答案了 我正在尝试使用 php 连接数据库 但出现此错误 警告 mysqli mysqli HY000 1045 第 7 行 C wamp64 www Login test 2 0 connectivity php 中的
  • 如何从消息队列中删除消息(仅当其格式正确时)?

    我想从一个队列中获取消息并将其发送到数据库 我只想在特定格式下才这样做 如果我使用Receive直接调用方法 访问时出现异常Body的消息 我失去了消息 因为Receive的方法MessageQueue从队列中删除消息 为了避免丢失消息 现