rocketmq双主发送消息 SLAVE_NOT_AVAILABLE 状态
RocketMQ最佳实践之Producer
投递状态
发送消息时,将得到包含SendStatus
的SendResult
。首先,我们假设消息的isWaitStoreMsgOK
= true(默认是true)。如果不是,我们将总会得到SEND_OK,如果没有抛出异常。下面是关于每个状态的描述列表:
FLUSH_DISK_TIMEOUT
如果 Broker 设置
MessageStoreConfig
的FlushDiskType=SYNC_FLUSH
(默认是ASYNC_FLUSH
),并且代理没有在MessageStoreConfig
的syncFlushTimeout(默认是5秒)时间内完成刷盘,您将获得这个状态。FLUSH_SLAVE_TIMEOUT
如果 Broker 的角色是
SYNC_MASTER
(默认是ASYNC_MASTER
),并且 Slave Broker 没有在MessageStoreConfig
的syncFlushTimeout(默认是5秒)时间内完成同步,您将得到这个状态。SLAVE_NOT_AVAILABLE
如果代理的角色是
SYNC_MASTER
(默认是ASYNC_MASTER),但是没有配置 Slave Broker ,您将获得这个状态。SEND_OK
SEND_OK 并不意味着它是可靠的。为了确保没有信息会丢失,应启用 SYNC_MASTER 或 SYNC_FLUSH
重复或者丢失消息
如果您得到FLUSH_DISK_TIMEOUT
、FLUSH_SLAVE_TIMEOUT
并且 Broker 恰好在此时意外宕机,您会发现你的消息丢失。此时,您有两个选择,一个是不管它,这可能导致这个消息丢失;另一个是重新发送消息,这可能会导致消息重复。我们经常建议重新发送,然后再消费时使用某个方法移除重复的消息。除非你觉得一些信息丢失并不重要。但是请记住,当您得到 SLAVE_NOT_AVAILABLE
状态时,重新发送是没有用的。如果出现这种情况,您应该保存场景并通知集群管理
超时
客户端发送请求到 Broker ,并等待响应,但如果最大等待时间过去了,没有返回响应,客户端就会抛出一个RemotingTimeoutException
。默认的等待时间是3秒。您还可以使用 send(msg, timeout)
代替 send(msg)
来传递超时参数。注意,我们不建议等待时间过小,因为 Broker 需要一些时间来刷新磁盘或与 Slave 进行同步。而且,如果它超过 syncFlushTimeout,那么它的值可能不会有多大的影响,因为在超时之前,代理可能会以FLUSH_SLAVE_TIMEOUT
或FLUSH_SLAVE_TIMEOUT
返回响应。
消息大小
我们建议的消息的大小应该不超过 512 K。
异步发送
默认 send(msg)
将阻塞直到返回的响应。所以如果你关心的是性能,我们建议你使用 send(msg, callback)
,这将会以异步方式发送。
生产者组
正常情况下,生产者组没有影响。但如果你开启了事物,你应该注意它。默认情况下,您只能在同一个JVM中只创建同一个生产者组,这通常是足够的。
线程安全
生产者是线程安全的,您可以在业务解决方案中使用它。
性能
如果您希望在一个JVM中有多个生产者进行大数据处理,我们建议:
- 与一些生产者一起使用异步发送(3 ~ 5就足够了)
- 为每个生产者setInstanceName
rocketmq双主发送消息 SLAVE_NOT_AVAILABLE 状态的更多相关文章
- Docker 部署 RocketMQ 双主双从模式( 版本v4.7.0)
文章转载自:http://www.mydlq.club/article/96/ 系统环境: 系统版本:CentOS 7.8 RocketMQ 版本:4.7.0 Docker 版本:19.03.13 一 ...
- 49.RocketMQ 双主搭建(本文非EamonSec原创)
声明:本文非EamonSec原创,copy自网上下载的某个个文件 1.RocketMQ介绍 1.1. 简介 RocketMQ 是一款分布式.队列模型的消息中间件,具有以下特点: 能够保证严格的消息顺序 ...
- rocketmq双主模式
1.官网 https://rocketmq.apache.org/ 官方安装文档 https://rocketmq.apache.org/docs/quick-start/ 2.rocketmq多主配 ...
- k8s部署rocketmq 双主
由于apache 官网的 docker image 是单点,要实现集群方式部署. rocketmq 分为 nameserver 和 broker , 对于之间调用频繁的服务,会增加网络压力, 所以 考 ...
- RocketMQ学习笔记(16)----RocketMQ搭建双主双从(异步复制)集群
1. 修改RocketMQ默认启动端口 由于只有两台机器,部署双主双从需要四个节点,所以只能修改rocketmq的默认启动端口,从官网下载rocketmq的source文件,解压后使用idea打开,全 ...
- openerp学习笔记 跟踪状态,记录日志,发送消息
跟踪状态基础数据: kl_qingjd/kl_qingjd_data.xml <?xml version="1.0"?><openerp> <d ...
- RocketMq发送消息出现com.alibaba.rocketmq.client.exception.MQBrokerException: CODE: 2 DESC: [TIMEOUT_CLEAN_QUEUE]broker busy, start flow control for a while, period in queue: 201ms, size of queue: 1
最近对系统进行压测,发现发送消息到消息队列的时候出现如下错误: com.alibaba.rocketmq.client.exception.MQBrokerException: CODE: 2 DE ...
- Rocketmq异步发送消息
package com.bfxy.rocketmq.quickstart; import java.util.List; import org.apache.rocketmq.client.excep ...
- 深入研究RocketMQ生产者发送消息的底层原理
前言 hello,小伙伴们,王子又来和大家研究RocketMQ的原理了,之前的文章RocketMQ生产部署架构如何设计中,我们已经简单的聊过了生产者是如何发送消息给Broker的. 我们简单回顾一下这 ...
随机推荐
- 在Pandas中直接加载MongoDB的数据
在使用Pandas进行数据处理的时候,我们通常从CSV或EXCEL中导入数据,但有的时候数据都存在数据库内,我们并没有现成的数据文件,这时候可以通过Pymongo这个库,从mongoDB中读取数据,然 ...
- 面向对象,继承,浏览器,上传文件, ajax
'use strict'; //父类 class Student2{ constructor(name){ this.name = name || 'tom'; } hello(){ console. ...
- js在ie6下的一个bug—未结束标签的错误
在IE6下,如果在body标签没结束前,用代码获取body对象就会出现错误.如: <html> <head> <script type="text/javasc ...
- Fast Walsh-Hadamard Transform——快速沃尔什变换(二)
上次的博客有点模糊的说...我把思路和算法实现说一说吧... 思路 关于快速沃尔什变换,为了方便起见,我们采用线性变换(非线性变换不会搞). 那么,就会有一个变化前各数值在变换后各处的系数,即前一篇博 ...
- Tabindex
1.tabindex 属性可以设置键盘中的TAB键在控件中的移动顺序,及焦点的顺序 2. tabindex 属性值范围在1到32767之间 3. 默认的 tabindex 的值为 0 ,将排在所有指定 ...
- 如何用Fireworks制作经典的扫光字GIF动画
1.首先我们把背景选为黑色.再输入文字用白色填充,注意调整文字之间的间隔. 2.选中字体,对其进行转换为路径文件. 3.对间隔再做少许调整. 4.复制文字改为黑色,做平移,出现立体效果. 5.再复制一 ...
- Java学习笔记(4)----Public,Protected,Package,Private修饰符可见性
Java修饰符类型(public,protected,private,friendly) public的类.类属变量及方法,包内及包外的任何类均可以访问:protected的类.类属变量及方法,包内的 ...
- Flume -- Transfer one type of source to another type
Source within Flume is a kind of Server for outside client. Sink within Flume is a kind of client fo ...
- Difference between scipy.fftpack and numpy.fft
scipy.fftpack 和 numpy.fft 的区别 When applying scipy.fftpack.rfft and numpy.fft.rfft I get the followin ...
- 泛型< ? extends > <? super> 理解
public class Test { public static void main(String [] args){ Plate<? extends Fruit> p = new Pl ...