@Override public void onMessage(Message message, Channel channel) throws Exception { RabbitMQMsg rabbitMQMsg = SerializationUtils.deserialize(message.getBody()); if (rabbitMQMsg != null) { Boolean isSuc = false; try { if (rabbitMQMsg.getType() == RabbitMQMsg.MQ_MSG_TYPE_P2P || rabbitMQMsg.getType() == RabbitMQMsg.MQ_MSG_TYPE_INVITE) { isSuc = yiXinAPIService.sendP2PMsg(rabbitMQMsg.getFromId(), rabbitMQMsg.getToId(), rabbitMQMsg.getYiXinMsg()); } else if (rabbitMQMsg.getType() == RabbitMQMsg.MQ_MSG_TYPE_CIRCLE) { String gameId = rabbitMQMsg.getYiXinMsg().getAppid(); String fromId = rabbitMQMsg.getFromId(); YiXinMsg msg = rabbitMQMsg.getYiXinMsg(); if (!gameWhiteListService.isWhiteListEnabled(gameId)) { // 未开启隔离模式 isSuc = yiXinAPIService.sendCircleMsg(fromId, msg); } else { // 开启隔离模式,须测试一下我的好友都不在白名单中的情况 isSuc = yiXinAPIService.sendCircleMsgWithTouids( fromId, gameWhiteListService.getFriendsWithinWhiteList(gameId, fromId).toJSONString(), msg); } } } catch (Exception e) { LOGGER.error("initNormalMessageMQConsumeTask exception error", e); AppMonitorLogger.info("incNormalMessageMQConsumeTaskExceptionCount"); } if (isSuc) { // 更新监控状态 if (rabbitMQMsg.getType() == RabbitMQMsg.MQ_MSG_TYPE_P2P) { AppMonitorLogger.info("incSuccGameSendP2PMsgAsyncCount"); } else if (rabbitMQMsg.getType() == RabbitMQMsg.MQ_MSG_TYPE_CIRCLE) { AppMonitorLogger.info("incSuccGameSendCircleMsgAsyncCount"); } else if (rabbitMQMsg.getType() == RabbitMQMsg.MQ_MSG_TYPE_INVITE) { AppMonitorLogger.info("incSuccGameFriendInviteAsyncCount"); } } else { // 一共失败了3次了 就算失败了 // 发送失败 加入失败队列等待再次发送 if (rabbitMQMsg.getQuota() > 0) { rabbitMQMsg.setQuota(rabbitMQMsg.getQuota() - 1); messageMQComponent.sendFailMessage(SerializationUtils.serialize(rabbitMQMsg)); } else { // 更新监控状态 if (rabbitMQMsg.getType() == RabbitMQMsg.MQ_MSG_TYPE_P2P) { AppMonitorLogger.info("incFailGameSendP2PMsgAsyncCount"); } else if (rabbitMQMsg.getType() == RabbitMQMsg.MQ_MSG_TYPE_CIRCLE) { AppMonitorLogger.info("incFailGameSendCircleMsgAsyncCount"); } else if (rabbitMQMsg.getType() == RabbitMQMsg.MQ_MSG_TYPE_INVITE) { AppMonitorLogger.info("incFailGameFriendInviteAsyncCount"); } } } } }
我们的message中quota默认是3,我们每发送失败一次就会减一,直到减到0,我们会记录失败日志。
相关推荐
标题中提到的"SPI自发自收实验.zip_pilotoy9_spi 自发自收_spi自发自收_stm32f407 spi 自发自收"可能是一个包含实验代码和文档的压缩包,其中“pilotoy9”可能是开发板或项目的名称。这个实验的目标是验证STM32F407...
总的来说,STM32F103实现串口自收自发涉及的关键技术包括:串口初始化、中断配置、中断服务函数编写、数据缓冲管理以及应用层逻辑处理。理解这些知识点对于开发基于STM32的串口通信项目至关重要。在提供的压缩包文件...
总的来说,理解和掌握CAN自发自收以及CAN-RS232网桥的概念和技术,对于进行有效的CAN网络设计和故障排查至关重要。通过使用提供的"CAN程序"资源,开发者和工程师可以更深入地了解和实践CAN通信,提升系统性能和稳定...
Socket自发自收是一种网络编程技术,它允许一个进程通过Socket接口发送数据,并在同一进程中接收自己发送的数据。在TCP/IP协议栈中,Socket是应用程序与网络通信的接口,它提供了在网络中传输数据的能力。本篇文章将...
本文将详细讲解如何实现STM32的串口2自发自收功能,以及涉及到的相关知识点。 首先,STM32F103系列是基于ARM Cortex-M3内核的微控制器,它具有多个串行通信接口,如USART(通用同步/异步收发传输器)和UART(通用...
【课题7】利用8251实现串行口自发自收,并显示。 二、课程设计任务与目标 设计要求: 1. 按“A”键:清除数码管显示,并通过小键盘输入四位16进制数,同时显示在右侧四个数码管上。 2. 按“B”键:执行串行发送,...
标题中的“2812can总线自发自收程序”指的是使用TI公司的TMS320F2812数字信号处理器(DSP)实现的一种CAN(Controller Area Network)总线通信程序。CAN总线是一种多主站串行通信协议,广泛应用于汽车、工业自动化等...
关于串口自发自收的汇编小程序,是51单片机的,收发成功在数码管上显示Good.
STM32串口1自发自收是嵌入式开发中的常见应用场景,主要涉及STM32F10X系列芯片的串行通信功能。在本文中,我们将深入探讨如何配置和使用STM32F103的串口1进行数据的发送与接收。 首先,STM32F103是一款基于ARM ...
本篇文章将详细介绍一个简单的串口自发自收程序,该程序用于发送和接收ASCII码字符,并且遵循特定的数据格式:每个字有一个逻辑“1”起始位,8位ASCII码数据位,以及1个逻辑“1”停止位,传输波特率为9600baud。...
本篇文章将详细讲解基于“简单的串口自发自收程序”的相关知识点,包括串口的基本概念、自发自收的含义、虚拟串口的应用以及如何进行串口调试。 首先,串口,即串行通信接口,是一种按照串行方式传输数据的接口,...
linux下串口程序,实现串口回环自发自收,测试串口
【描述】:“自发自收超声信号源的设计基于FPGA实现,涉及超声波信号的产生、接收以及CPLD和单片机的应用。” 【标签】:“自发自收”“超声信号源” 【正文】: 超声信号源在许多领域,尤其是无损检测、医学成像...
VB串口自发自收程序,只要把串口2-3脚短接就可以了,简单易学
linux下串口驱动的自发自收测试程序。测试可用。操作方便,运行平台在linux系统平台下,操作也很简单。可以当做串口通用模板。
UART自发自收代码指的是通过UART接口编写一个程序,使得发送出去的数据能够被自身接收并返回,这通常用于验证UART通信链路的正确性。 UART通信的基本原理: 1. **串行通信**:UART是一种串行通信协议,数据一位接一...
labview串口实现自发自收的小程序
- **程序设计**:一个自发自收程序通常包括两个部分,一是发送数据,二是接收数据。在VB中,可以创建两个线程,一个负责定时发送数据,另一个负责监听串口接收数据。 - **事件驱动编程**:VB的事件驱动模型使得...
C语言27-I2C从机中断模式与IO口模拟I2C主机进行自发自收(STC32G-DEMO-CODE-220311kw)C语言27-I2C从机中断模式与IO口模拟I2C主机进行自发自收(STC32G-DEMO-CODE-220311kw)C语言27-I2C从机中断模式与IO口模拟I2C...
详细介绍了单片机的自发自收软件编程,有用的可以下载