http://activemq.apache.org/should-i-deploy-the-broker-inside-my-jvm-or-appserver.html
你能将ActiveMQ Broker内嵌到JVM或者应用服务器之中。
这取决于多少的JVMS以及你的备份和还原策略。
嵌入式broker的优势:
1 嵌入式broker可以使用VM transport,而不需要使用序列化和sockets。VM transport可以代替AcitiveMQ通过value来传输Messages。
这种ObjectMessage可能出现少部分异常情况。JMS规范要求你必须序列化ObjectMessage 的body,无论是否发送。
你可以选择禁用这个特性,如果你在使用VM transport时想要更高的性能。
2 它只需要单独部署在nuit/JVM中,而不是2台。
嵌入式broker的劣势:
如果你有很多的JVMs(虚拟机),我说的是100个左右量级并且成功率要求很高的情况下,你不希望丢失Message,所以你需要备份并持久化Message到数据库或者文件中。
以上情况下,一个嵌入式broker中每个JVM都能处理大量的Message,或许你可以简单的将其中2个进行分离识别,当100个jvm与一个较小的broker集群进行交互时,处理每个jvm的持久化区、服务器崩溃、管理持久化文件/和数据库会是一个困扰。
将ActiveMQ brokers分别运行和管理相对容易。或许你会有一些ClassLoader的故障但你将ActiveMQ嵌入一个应用服务器(application server)比如这样:
java.lang.NoSuchMethodError:
javax.jms.Session.createConsumer(Ljavax/jms/Destination;)Ljavax/jms/MessageConsumer;