关于Failover协议的使用

1、Failover是所有协议之上的一个协议,所以其用法如下:

failover:(tcp://localhost:61616,tcp://10.88.112.165:61617)?randomize=false

或者

failover:()?randomize=false&updateURIsURL=file:/E:/emq-4.0.0-verify/to_removed/urlist.txt

/////urlist.txt///begin////

tcp://localhost:61616,tcp://10.88.112.165:61617

/////urlist.txt///end//////

1、  Failover协议仅用在JMS客户端和Broker间,不能用在broker和broker之间;

3、  failover方式跟消费者是异步还是同步接收没有关系。

4、  main方法中直接调用Failover失效的原因:根本原因:是因为没有可用的用户线程,导致JVM自动退出,因为main方法执行完后,会生成一个【DestroyJavaVM】的用户线程。

如果没有再没有其他用户线程的话,就轮到执行【DestroyJavaVM】的用户线程了,所以JVM会自动退出,导致failover切换失败。

5、  在main方法中合理使用failover协议,建议通过另起线程的方式消费消息;

6、  如果所有的用户线程终止,那JVM就会终止。

7、  使用文件记录uri列表的方式,具有很好的扩展性,因为客户端每次重连时都是从文件加载一次,所有可以随时从文件中更新uri列表。








用户线程和守护线程的区别:

>>Java中有两类线程,用户线程和守护线程;
>>通常,守护线程用来执行用户线程的的服务;
>>应用线程的main方法是一个用户线程;
>>由用户线程创建的线程是用户线程;
>>可以显式的将一个用户线程转化为守护线程,调用方法setDaemon(),需要在线程start之前调用;
>>判断一个线程是否是守护线程,通过方法isDaemon()来判断;
>>如果一个应用要持续运行,其必须要总至少保持有一个用户线程;
>>如果所有的用户线程终止,则JVM就会终止;

猜你喜欢

转载自can-do.iteye.com/blog/2245525
今日推荐