博学,切问,近思--詹子知 (https://jameszhan.github.io)
1.直接使用应用程序创建。
public static void main(String[] args) throws JMSException { String uri = "tcp://tcp://localhost:61616"; // 创建连接工厂。 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(uri); //创建连接对象。 Connection connection = connectionFactory.createConnection(); //创建Queue对象 Destination queue = new ActiveMQQueue("Queue"); //创建Topic对象 Destination topic = new ActiveMQTopic("Topic"); }
2.Use Jndi 配置。
使用JNDI配置可以屏蔽具体的实现细节,可以不用修改代码就可以实现在不同消息中间消息件产品之间的切换。一般情况下,我们只要使用JMS规范中提及的那些接口就可以完成所有的编程。它们之间的关系如下:
本例介绍ActiveMQ提供的默认的JNDI的支持。java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory java.naming.provider.url=tcp://localhost:61616 //username java.naming.security.principal= //password java.naming.security.credentials= connectionFactoryNames=con1,con2 queue.MyQueue=MyQueue topic.MyTopic=MyTopic
本例中,配置了两个连接工厂con1,con2,一个Queue对象MyQueue,一个Topic对象MyTopic。
import java.io.IOException; import java.util.Properties; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import org.apache.log4j.Logger; public class JndiFactory { private static final Logger LOGGER = Logger.getLogger(JndiFactory.class); protected Context context = null; public void initalize() throws NamingException { Properties props = new Properties(); try{ props.load(this.getClass().getResourceAsStream("jndi.properties")); }catch(IOException ex){ LOGGER.error("Can't load jndi.properties.", ex); } context = new InitialContext(props); } public Context getJndiContext() throws NamingException { if(context == null){ initalize(); } return context; } }
使用JNDI拿到连接对象以及其他资源。
public static void main(String[] args) throws NamingException, JMSException { JndiFactory factory = new JndiFactory(); Context ctx = factory.getJndiContext(); //获取连接工厂。 ConnectionFactory factory1 = (ConnectionFactory) ctx.lookup("con1"); ConnectionFactory factory2 = (ConnectionFactory) ctx.lookup("con2"); //创建连接对象 Connection conn = factory1.createConnection(); //获取Queue对象。 Destination queue = (Queue) ctx.lookup("MyQueue"); //获取Topic对象。 Destination topic = (Topic) ctx.lookup("MyTopic"); System.out.println(conn); System.out.println(queue); System.out.println(topic); }