HornetQ是由简单传统Java对象(POJO)实现,因此它可以在任何依赖注入的框架中运行,比如JBoss Microcontainer,Sprint或Google Guice。另外如果你的应用程序内部需要消息功能,你可以在程序中 直接实例化HornetQ的客户端或服务器端。我们称之为嵌入式 HornetQ。
有些应用需要高性能、事务性及持久化的消息服务,但是又不希望自己去费时费力实现它。于是嵌入式HornetQ就 成为了一个很适当的选择。
要使用嵌入式HornetQ只需要几个简单的步骤。首先初始化配置对象,再初始化服务器并启动它,在你的虚拟机 中就运行越来了一个HornetQ服务器。就是这么简单。
按照以下步骤去做:
创建配置对象--这个对象包装了HornetQ的配置信息。如果你想使用配置文件,则使用FileConfigurationImpl。
import org.hornetq.core.config.Configuration; import org.hornetq.core.config.impl.FileConfiguration; ... Configuration config = new FileConfiguration(); config.setConfigurationUrl(urlToYourconfigfile); config.start();
如果不需要配置文件,可以用ConfigurationImpl,只要将其中的各种配置参数设置好 即可。如添加适当的接收器。
ConfigurationImpl用来配置接收器。和主要配置文件相似,只需要添加 NettyAcceptorFactory即可。
import org.hornetq.core.config.Configuration; import org.hornetq.core.config.impl.ConfigurationImpl; ... Configuration config = new ConfigurationImpl(); HashSet<TransportConfiguration> transports = new HashSet<TransportConfiguration>(); transports.add(new TransportConfiguration(NettyAcceptorFactory.class.getName())); transports.add(new TransportConfiguration(InVMAcceptorFactory.class.getName())); config.setAcceptorConfigurations(transports);
接着就需要初始化并启动HornetQ服务。org.hornetq.api.core.server.HornetQ类有一些静态方法可用来创建HornetQ服务器。
import org.hornetq.api.core.server.HornetQ; import org.hornetq.core.server.HornetQServer; ... HornetQServer server = HornetQ.newHornetQServer(config); server.start();
你还可以直接实例化HornetQServerImpl:
HornetQServer server = new HornetQServerImpl(config); server.start();
你还可以使用一个依赖注入框架来启动HornetQ,比如JBoss Microcontainer™或Spring框架™。
HornetQ独立服务器使用的是JBoss Microcontainer作为其框架。在HornetQ的发布中包括的HornetQBootstrapServer和hornetq-beans.xml文件共同实现了 在JBoss Microcontainer中对HornetQ服务器的引导。
要使用JBoss Microcontainer,需要在xml文件中声明HornetQServer 和Configuration对象。另外还可以注入一个安全管理器和一个MBean服务器。但是这些 注入是可选的。
下面是一个基本的JBoss Microcontainer的XML Bean的声明:
<?xml version="1.0" encoding="UTF-8"?> <deployment xmlns="urn:jboss:bean-deployer:2.0"> <!-- The core configuration --> <bean name="Configuration" class="org.hornetq.core.config.impl.FileConfiguration"> </bean> <!-- The core server --> <bean name="HornetQServer" class="org.hornetq.core.server.impl.HornetQServerImpl"> <constructor> <parameter> <inject bean="Configuration"/> </parameter> </constructor> </bean> </deployment>
HornetQBootstrapServer实现了JBoss Microcontainer的简单封装。
HornetQBootstrapServer bootStrap = new HornetQBootstrapServer(new String[] {"hornetq-beans.xml"}); bootStrap.run();
嵌入式HornetQ的连接和普通的连接一样要创建连接工厂:
使用核心接口,需要创建一个ClientSessionFactory然后正常建立连接。
ClientSessionFactory nettyFactory = HornetQClient.createClientSessionFactory( new TransportConfiguration( InVMConnectorFactory.class.getName())); ClientSession session = factory.createSession(); session.createQueue("example", "example", true); ClientProducer producer = session.createProducer("example"); ClientMessage message = session.createMessage(true); message.getBody().writeString("Hello"); producer.send(message); session.start(); ClientConsumer consumer = session.createConsumer("example"); ClientMessage msgReceived = consumer.receive(); System.out.println("message = " + msgReceived.getBody().readString()); session.close();
使用JMS接口连接嵌入HornetQ同样简单。只需要直接实例化 ConnectionFactory即可。如下面例子所示:
ConnectionFactory cf = HornetQJMSClient.createConnectionFactory( new TransportConfiguration(InVMConnectorFactory.class.getName())); Connection conn = cf.createConnection(); conn.start(); Session sess = conn.createSession(true, Session.SESSION_TRANSACTED); MessageProducer prod = sess.createProducer(queue); TextMessage msg = sess.createTextMessage("Hello!"); prod.send(msg); sess.commit(); MessageConsumer consumer = sess.createConsumer(queue); TextMessage txtmsg = (TextMessage)consumer.receive(); System.out.println("Msg = " + txtmsg.getText()); sess.commit(); conn.close();
有关如何设置与运行JMS嵌入式HornetQ的例子请参见Section 11.2.1, “嵌入式”。