用delphi xe 开发rabbitmq应用(四)

2024-01-20 09:08
文章标签 应用 开发 rabbitmq delphi xe

本文主要是介绍用delphi xe 开发rabbitmq应用(四),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

读取死信队列

死信队列中的消息由系统自动增加了一些标识属性,x-death(是一个Array),x-first-death-exchange(queue/reason)。

死信队列中的消息如果不是由于异常(publisher代码控制)而进入,由于超时而进入,那其中的消息仍然可以正常读取(消费),只要代码中做特别处理。


   try
       //解码Header,如果从死信队列接收,其中还有 (x-death) Array
       with aMsg.Header.PropertyList.ApplicationHeaders do
       begin
           if IsFieldExist('x-death') then
           begin
                vDeath := Field['x-death'].AsArray;

                if vDeath.Items[0].kind = 'F' then
                begin
                   vTable := vDeath.Items[0].CastAsTable;
                   SiMain.LogInt64('TAsyncHello.DecodeMessage->count', vTable.FieldByName('count').Value.AsLongLongInt.Value);
                   SiMain.LogString('TAsyncHello.DecodeMessage->reason', vTable.StringByName('reason'));
                   SiMain.LogString('TAsyncHello.DecodeMessage->queue', vTable.StringByName('queue'));
                   SiMain.LogString('TAsyncHello.DecodeMessage->exchange', vTable.StringByName('exchange'));
                   //SiMain.LogString('x-first-death-exchange', vTable.StringByName('x-first-death-exchange'));

                end;
           end;
           if IsFieldExist('x-first-death-exchange') then
              SiMain.LogString('x-first-death-exchange', StringByName('x-first-death-exchange'));

           if IsFieldExist('x-first-death-queue') then
              SiMain.LogString('x-first-death-queue', StringByName('x-first-death-queue'));

           if IsFieldExist('x-first-death-reason') then
              SiMain.LogString('x-first-death-reason', StringByName('x-first-death-reason'));
       end;
   Except on E: Exception do
       begin
           siMain.LogException('解码消息头错误:' + E.Message);
           MainForm.MemoMessages.Lines.Add('解码消息头错误:' + E.Message);
       end;
   end;

   vMsgID := aMsg.Header.PropertyList.MessageID.Value;
   vAppID := aMsg.Header.PropertyList.AppID.Value;
   SiMain.LogString('AppID', aMsg.Header.PropertyList.AppID.Value);

   SiMain.LogInteger('TAsyncHello.DecodeMessage-->DeliveryMode', aMsg.Header.PropertyList.DeliveryMode.Value);
   SiMain.LogInteger('TAsyncHello.DecodeMessage-->Priority', aMsg.Header.PropertyList.Priority.Value);
   SiMain.LogString('TAsyncHello.DecodeMessage-->ContentType', aMsg.Header.PropertyList.ContentType.Value);
   //SiMain.LogString('Expiration', aMsg.Header.PropertyList.Expiration.Value);
   SiMain.LogString('TAsyncHello.DecodeMessage-->ContentEncoding', aMsg.Header.PropertyList.ContentEncoding.Value);
 

这篇关于用delphi xe 开发rabbitmq应用(四)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/625501

相关文章

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

Python循环缓冲区的应用详解

《Python循环缓冲区的应用详解》循环缓冲区是一个线性缓冲区,逻辑上被视为一个循环的结构,本文主要为大家介绍了Python中循环缓冲区的相关应用,有兴趣的小伙伴可以了解一下... 目录什么是循环缓冲区循环缓冲区的结构python中的循环缓冲区实现运行循环缓冲区循环缓冲区的优势应用案例Python中的实现库

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

python中time模块的常用方法及应用详解

《python中time模块的常用方法及应用详解》在Python开发中,时间处理是绕不开的刚需场景,从性能计时到定时任务,从日志记录到数据同步,时间模块始终是开发者最得力的工具之一,本文将通过真实案例... 目录一、时间基石:time.time()典型场景:程序性能分析进阶技巧:结合上下文管理器实现自动计时