Send [1] times, still failed

com.alibaba.rocketmq.client.exception.MQClientException: Send [1] times, still failed, cost [696094]ms, Topic: TopicTest, BrokersSent: [broker-b, null]
See https://github.com/alibaba/RocketMQ/issues/50 for further details.
    at com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:578)
    at com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1031)
    at com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1025)
    at com.alibaba.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:95)

关键代码片段

        final long maxTimeout = this.defaultMQProducer.getSendMsgTimeout() + 1000;
        final long beginTimestamp = System.currentTimeMillis();
        long endTimestamp = beginTimestamp;
        TopicPublishInfo topicPublishInfo = this.tryToFindTopicPublishInfo(msg.getTopic());
        if (topicPublishInfo != null && topicPublishInfo.ok()) {
            MessageQueue mq = null;
            Exception exception = null;
            SendResult sendResult = null;
            int timesTotal = 1 + this.defaultMQProducer.getRetryTimesWhenSendFailed();
            int times = 0;
            String[] brokersSent = new String[timesTotal];
            for (; times < timesTotal && (endTimestamp - beginTimestamp) < maxTimeout; times++) {
                String lastBrokerName = null == mq ? null : mq.getBrokerName();
                MessageQueue tmpmq = topicPublishInfo.selectOneMessageQueue(lastBrokerName);
                if (tmpmq != null) {
                    mq = tmpmq;
                    brokersSent[times] = mq.getBrokerName();
                    try {
                        sendResult = this.sendKernelImpl(msg, mq, communicationMode, sendCallback, timeout);
                        endTimestamp = System.currentTimeMillis();
                        switch (communicationMode) {
                        case ASYNC:
                            return null;
                        case ONEWAY:
                            return null;
                        case SYNC:
                            if (sendResult.getSendStatus() != SendStatus.SEND_OK) {
                                if (this.defaultMQProducer.isRetryAnotherBrokerWhenNotStoreOK()) {
                                    continue;
                                }
                            }

                            return sendResult;
                        default:
                            break;
                        }
                    }
                    catch  ... //省略部分代码
                }
                else {
                    break;
                }
            } // end of for

            if (sendResult != null) {
                return sendResult;
            }

            String info =
                    String.format("Send [%d] times, still failed, cost [%d]ms, Topic: %s, BrokersSent: %s", //
                        times, //
                        (System.currentTimeMillis() - beginTimestamp), //
                        msg.getTopic(),//
                        Arrays.toString(brokersSent));

            info += FAQUrl.suggestTodo(FAQUrl.SEND_MSG_FAILED);

            throw new MQClientException(info, exception);
        }

1. 循环几次发送几次

2. selectOneMessageQueue 返回与上一个broker不同名的broker

3. timesTotal  是brokersSent 数组

4. 某broker发送失败时,如果想要重试其他broker,需要把retryAnotherBrokerWhenNotStoreOK设置为true(默认为false)

5. 最大超时时间是在超时时间基础上增加1s(坑?)

时间: 2024-11-02 15:20:33

Send [1] times, still failed的相关文章

org.apache.activemq.transport.InactivityIOException: Cannot send, channel has already failed

项目是使用activeMQ 发布订阅的模式,在本地测试正常,但是 放到服务器上出现这个错误: org.apache.activemq.transport.InactivityIOException: Cannot send, channel has already failed 解决办法: 是因为缺少jar包,加上 hawtbuf-1.9.jar ,问题解决.

PHP系列 | PDO::prepare(): send of 68 bytes failed with errno=32 Broken pipe

cli 模式报错 [2019-11-20T14:33:25+08:00][ error ] [8]PDO::prepare(): send of 68 bytes failed with errno=32 Broken pipe error 相关代码 class RedisSubscribe { public function subscribe() { $redis = BaseRedis::plocal(); $redis->setOption(\Redis::OPT_READ_TIMEOU

[z]protobuf实现c++与java之间的数据传递,beancopy数据到前台

[z]http://blog.csdn.net/xhyzdai/article/details/46684335 定义proto文件 [plain] view plain copy option java_package = "com.wy.web"; message my_message{ required string startedTime =1; required string version=2; required double configuredCapacity=3; r

网络公有协议之邮件SMTP篇

1.写在开始之前 之前在工作中也是遇到过smtp协议,那个时候因为解决出现的bug比较急,所以并没有仔细去学习或者深入了解smtp相关知识,刚好最近工作又碰到相关问题,因为bug的奇怪,所以不得不放下手头的相关工作,好好研究了下smtp协议的相关流程和具体实施,所以记录下来和大家一起分享. 2.smtp理论基础知识 smpt(全称为 simple mail transfer protocol),中文的意思也就是简单的邮件传输协议,它是一组用于有源地址到目的地址传输邮件的规则,是由它来控制信件的中

C多线程编程信号处理

用linux C编程的时候,处理信号在所难免.在多线程编程中需要注意两个函数的使用,一个是pthread_sigmask(), 用来在线程中屏蔽某个信号:另一个是sigaction(),在线程中用来设置信号的处理方式. void sig_handler1(int arg){ printf("thread1 get signal\n"); return;}void sig_handler2(int arg){ printf("thread2 get signal\n"

C语言通过串口发送AT指令

以下代码是通过串口发送AT指令: atcmd.c: #include <stdio.h> #include <string.h> #include "atcmd.h" static HANDLE hCom; static char com_name[32] = {0}; static int BaudRate; FILE *fp; int AT_ComOpen() { fp = fopen("debug.txt", "w"

原创:Twemproxy源码分析之三:其进程以及时间模型

概述:本来自己写了一篇,但是看到http://www.tuicool.com/articles/NfqeEf这篇更好,于是就算转载过来了吧.下一篇我们会讲到twemproxy的核心,即其转发响应转发请求. 作为一个proxy服务,我们应该深入了解它的进程和事件模型. 进程模型: 通过grep代码,查找fork()和pthread_create()函数的调用,并分析调用者两个函数的代码.我们可以看到twemproxy使用的是单进程单线程来处理请求,另外有一个线程来处理统计数据,但并不参与处理请求功

TypeError: can&#39;t convert console.log(...) to primitive type

一.背景 火狐浏览器提示这个错误,谷歌没有. 二.出错代码 1 var eventHandlers = { 2 'succeeded': function(e){ 3 console.log('send success' + e.cause) 4 }, 5 'failed': function(e){ 6 console.log('send failed,reason='+e.cause) 7 } 8 }; 三.原因 火狐处理console.log('send success' + e.caus

Flume简介与使用(二)——Thrift Source采集数据

Flume简介与使用(二)——Thrift Source采集数据 继上一篇安装Flume后,本篇将介绍如何使用Thrift Source采集数据. Thrift是Google开发的用于跨语言RPC通信,它拥有功能强大的软件堆栈和代码生成引擎,允许定义一个简单的IDL文件来生成不同语言的代码,服务器端和客户端通过共享这个IDL文件来构建来完成通信. Flume的Thrift Source是其实现的众多Source中的一个,Flume已经实现了服务器端,因此我们可以用任意自己熟悉的语言编写自己的Th