ImageVerifierCode 换一换
格式:DOCX , 页数:6 ,大小:17.67KB ,
资源ID:20250651      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20250651.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ActiveMQ的消息重发机制Word格式文档下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ActiveMQ的消息重发机制Word格式文档下载.docx

1、其实在所有的客户端机器上,内存中都运行着一套客户端的ActiveMQ环境,该环境负责缓存发来的消息,负责维持着和ActiveMQ服务器的消息通讯,负责失效转移(fail-over)等,所有的判断和处理都是由这套客户端环境来完成的。 我们可以来对ActiveMQ的重发策略(Redelivery Policy)来进行自定义配置,其中的配置参数主要有以下几个: a) collisionAvoidanceFactor :碰撞躲避因数,默认值是0.15,这个参数是为了躲避高并发的重发带来的问题,我们查看org.apache.activemq.RedeliveryPolicy类的源代码, / +/-15%

2、 for a 30% spread -cgs protected double collisionAvoidanceFactor = 0.15d; protected long initialRedeliveryDelay = 1000L;可以发现,该默认值带来的变动范围是正负百分之15,也就是有30%的范围,也就是说,如果延迟发送时间(也就是initialRedeliveryDelay 默认值)是1000毫秒,则该条消息第一次有可能被拖延850毫秒到1150毫秒之间后被发送,如果有第二次重发,基数就不是1000毫秒了,而是以上一次重发拖延时间为基础来算。源代码如下: public long

3、getNextRedeliveryDelay(long previousDelay) long nextDelay = redeliveryDelay; if (previousDelay > 0 && useExponentialBackOff & backOffMultiplier & 1) nextDelay = (long) (previousDelay * backOffMultiplier); if(maximumRedeliveryDelay != -1 & nextDelay & maximumRedeliveryDelay) / in case the user

4、 made max redelivery delay less than redelivery delay for some reason. nextDelay = Math.max(maximumRedeliveryDelay, redeliveryDelay); if (useCollisionAvoidance) /* * First random determines +/-, second random determines how far to * Go in that direction. -cgs */ Random random = getRandomNumberGenera

5、tor(); double variance = (random.nextBoolean() ? collisionAvoidanceFactor : -collisionAvoidanceFactor) * random.nextDouble(); nextDelay += nextDelay * variance; return nextDelay; b)maximumRedeliveries :最大重发次数,默认值是6,如果你想不限次数重发,可以设置成-1。同样是org.apache.activemq.RedeliveryPolicy类中的代码: public static final

6、int NO_MAXIMUM_REDELIVERIES = -1; public static final int DEFAULT_MAXIMUM_REDELIVERIES = 6; protected int maximumRedeliveries = DEFAULT_MAXIMUM_REDELIVERIES;我们探究一下maximumRedeliveries 的get方法,可以发现有org.apache.activemq.ActiveMQSession和org.apache.activemq.ActiveMQMessageConsumer两个类中有用到: 其中ActiveMQSession

7、中的代码如下: / Figure out how long we should wait to resend this message. long redeliveryDelay = redeliveryPolicy.getInitialRedeliveryDelay(); for (int i = 0; i < redeliveryCounter; i+) / 每次重发拖延时间都是以上一次重发拖延时间来算,所以这里for循环来取得最新的拖延时间 redeliveryDelay = redeliveryPolicy.getNextRedeliveryDelay(redeliveryDel

8、ay); / 交给定时任务重发 connection.getScheduler().executeAfterDelay(new Runnable() public void run() (ActiveMQDispatcher)md.getConsumer().dispatch(md); , redeliveryDelay); ActiveMQMessageConsumer中的代码类似。 c)maximumRedeliveryDelay :重发最大拖延时间,默认为-1,表示没有最大拖延时间,此参数只有当useExponentialBackOff 为true时起效。同样是RedeliveryPol

9、icy中的代码: protected long maximumRedeliveryDelay = -1; 。看源代码就显而易见了。 d)initialRedeliveryDelay :第一次重发的拖延时间基础,默认是1000,单位为毫秒,前面讲collisionAvoidanceFactor 属性时已经提到过,这里不再多说。 e)redeliveryDelay :如果initialRedeliveryDelay 为0,则使用redeliveryDelay ,默认也是1000。RedeliveryPolicy中源代码如下: protected long redeliveryDelay = ini

10、tialRedeliveryDelay; f)useCollisionAvoidance :消息重发时是否采用前面提到的碰撞避免collisionAvoidanceFactor 参数,默认是false,不采用。源代码上面也给出了,这里不再多说。 g)useCollisionAvoidance :是否使用成倍增加拖延,默认为false,如果我们希望重发的拖延时间一次比一次大很多,则可以设置它为true。上面已经给出过源代码,这里再次给出: protected boolean useExponentialBackOff; protected double backOffMultiplier = 5

11、.0; * go in that direction. -cgs可以看出,成倍拖延是将上一次拖延时间乘以backOffMultiplier来实现的,而 backOffMultiplier默认为5. h)backOffMultiplier :成倍拖延时间的倍率,默认为5,上面已经提到了,这里不再多说。 那么接下来我们讨论下该如何配置上面所说的几项,我们可以通过Java代码,也就是JMS API来配置,也可以通过spring来配置,当然也可以通过连接器的URL来配置: 如果直接使用JMS API来使用ActiveMQ,我们可以如下配置(代码来自ActiveMQ的官方说明): ActiveMQCon

12、nection connection . / Create a connection RedeliveryPolicy queuePolicy = new RedeliveryPolicy(); queuePolicy.setInitialRedeliveryDelay(0); queuePolicy.setRedeliveryDelay(1000); queuePolicy.setUseExponentialBackOff(false); queuePolicy.setMaximumRedeliveries(2); RedeliveryPolicy topicPolicy = new Red

13、eliveryPolicy(); topicPolicy.setInitialRedeliveryDelay(0); topicPolicy.setRedeliveryDelay(1000); topicPolicy.setUseExponentialBackOff(false); topicPolicy.setMaximumRedeliveries(3); / Receive a message with the JMS API RedeliveryPolicyMap map = connection.getRedeliveryPolicyMap(); map.put(new ActiveM

14、QTopic(topic1), topicPolicy); map.put(new ActiveMQQueue(queue1), queuePolicy);注意,从ActiveMQ5.7开始,我们可以给每个目的地(Destination)配置不同的重发策略。ActiveMQConnection类中有一个成员变量 private RedeliveryPolicyMap redeliveryPolicyMap;,用来给不同的目的地配置不同的重发策略。至于如何在连接器的URL上配置,可以参考官方文档:http:/activemq.apache.org/connection-configuration-uri.html

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1