阅读更多
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就会终止;