`

自发自收以及多对一朋友圈mq

 
阅读更多
 @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 自发自收

    标题中提到的"SPI自发自收实验.zip_pilotoy9_spi 自发自收_spi自发自收_stm32f407 spi 自发自收"可能是一个包含实验代码和文档的压缩包,其中“pilotoy9”可能是开发板或项目的名称。这个实验的目标是验证STM32F407...

    串口自收自发-stm32f103_bicyclelyg_STM32F103_STM32自发自收_

    总的来说,STM32F103实现串口自收自发涉及的关键技术包括:串口初始化、中断配置、中断服务函数编写、数据缓冲管理以及应用层逻辑处理。理解这些知识点对于开发基于STM32的串口通信项目至关重要。在提供的压缩包文件...

    can自发自收

    总的来说,理解和掌握CAN自发自收以及CAN-RS232网桥的概念和技术,对于进行有效的CAN网络设计和故障排查至关重要。通过使用提供的"CAN程序"资源,开发者和工程师可以更深入地了解和实践CAN通信,提升系统性能和稳定...

    socket自发自收

    Socket自发自收是一种网络编程技术,它允许一个进程通过Socket接口发送数据,并在同一进程中接收自己发送的数据。在TCP/IP协议栈中,Socket是应用程序与网络通信的接口,它提供了在网络中传输数据的能力。本篇文章将...

    STM32 串口2自发自收

    本文将详细讲解如何实现STM32的串口2自发自收功能,以及涉及到的相关知识点。 首先,STM32F103系列是基于ARM Cortex-M3内核的微控制器,它具有多个串行通信接口,如USART(通用同步/异步收发传输器)和UART(通用...

    【课题7】利用8251实现串行口自发自收,并显示。

    【课题7】利用8251实现串行口自发自收,并显示。 二、课程设计任务与目标 设计要求: 1. 按“A”键:清除数码管显示,并通过小键盘输入四位16进制数,同时显示在右侧四个数码管上。 2. 按“B”键:执行串行发送,...

    2812can总线自发自收程序

    标题中的“2812can总线自发自收程序”指的是使用TI公司的TMS320F2812数字信号处理器(DSP)实现的一种CAN(Controller Area Network)总线通信程序。CAN总线是一种多主站串行通信协议,广泛应用于汽车、工业自动化等...

    51单片机串口自发自收汇编小程序

    关于串口自发自收的汇编小程序,是51单片机的,收发成功在数码管上显示Good.

    STM32 串口1自发自收

    STM32串口1自发自收是嵌入式开发中的常见应用场景,主要涉及STM32F10X系列芯片的串行通信功能。在本文中,我们将深入探讨如何配置和使用STM32F103的串口1进行数据的发送与接收。 首先,STM32F103是一款基于ARM ...

    微机原理 串口自发自收程序

    本篇文章将详细介绍一个简单的串口自发自收程序,该程序用于发送和接收ASCII码字符,并且遵循特定的数据格式:每个字有一个逻辑“1”起始位,8位ASCII码数据位,以及1个逻辑“1”停止位,传输波特率为9600baud。...

    简单的串口自发自收程序,采用虚拟串口,便于调试

    本篇文章将详细讲解基于“简单的串口自发自收程序”的相关知识点,包括串口的基本概念、自发自收的含义、虚拟串口的应用以及如何进行串口调试。 首先,串口,即串行通信接口,是一种按照串行方式传输数据的接口,...

    linux下串口程序,实现串口回环自发自收,测试串口

    linux下串口程序,实现串口回环自发自收,测试串口

    自发自收超声信号源的设计

    【描述】:“自发自收超声信号源的设计基于FPGA实现,涉及超声波信号的产生、接收以及CPLD和单片机的应用。” 【标签】:“自发自收”“超声信号源” 【正文】: 超声信号源在许多领域,尤其是无损检测、医学成像...

    VB串口自发自收程序

    VB串口自发自收程序,只要把串口2-3脚短接就可以了,简单易学

    Linux 串口回环自发自收测试程序

    linux下串口驱动的自发自收测试程序。测试可用。操作方便,运行平台在linux系统平台下,操作也很简单。可以当做串口通用模板。

    UART自发自收代码

    UART自发自收代码指的是通过UART接口编写一个程序,使得发送出去的数据能够被自身接收并返回,这通常用于验证UART通信链路的正确性。 UART通信的基本原理: 1. **串行通信**:UART是一种串行通信协议,数据一位接一...

    自发自收串口-labview程序.vi

    labview串口实现自发自收的小程序

    vb编写的串口自发自收程序

    - **程序设计**:一个自发自收程序通常包括两个部分,一是发送数据,二是接收数据。在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主机进行自发自收(STC32G-DEMO-CODE-220311kw)C语言27-I2C从机中断模式与IO口模拟I2C...

    自发自收的单片机设计

    详细介绍了单片机的自发自收软件编程,有用的可以下载

Global site tag (gtag.js) - Google Analytics