JAVA直接创建MQ连接与JNDI创建连接的区别

1.直接使用应用程序创建。

 

[java]  view plain copy
  1. public static void main(String[] args) throws JMSException {  
  2.         String uri = "tcp://tcp://localhost:61616";  
  3.         // 创建连接工厂。  
  4.         ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(uri);  
  5.           
  6.         //创建连接对象。  
  7.         Connection connection = connectionFactory.createConnection();  
  8.           
  9.         //创建Queue对象  
  10.         Destination queue = new ActiveMQQueue("Queue");  
  11.           
  12.         //创建Topic对象  
  13.         Destination topic = new ActiveMQTopic("Topic");       
  14.     }  

 

2.Use Jndi 配置。

使用JNDI配置可以屏蔽具体的实现细节,可以不用修改代码就可以实现在不同消息中间消息件产品之间的切换。一般情况下,我们只要使用JMS规范中提及的那些接口就可以完成所有的编程。它们之间的关系如下:

JMS

本例介绍ActiveMQ提供的默认的JNDI的支持。

[xhtml]  view plain copy
  1. java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory  
  2. java.naming.provider.url=tcp://localhost:61616  
  3. //username  
  4. java.naming.security.principal=  
  5. //password  
  6. java.naming.security.credentials=  
  7.   
  8. connectionFactoryNames=con1,con2  
  9. queue.MyQueue=MyQueue  
  10. topic.MyTopic=MyTopic  

 

本例中,配置了两个连接工厂con1,con2,一个Queue对象MyQueue,一个Topic对象MyTopic。

 

[java]  view plain copy
  1. import java.io.IOException;  
  2. import java.util.Properties;  
  3.   
  4. import javax.naming.Context;  
  5. import javax.naming.InitialContext;  
  6. import javax.naming.NamingException;  
  7.   
  8. import org.apache.log4j.Logger;  
  9.   
  10. public class JndiFactory {  
  11.       
  12.     private static final Logger LOGGER = Logger.getLogger(JndiFactory.class);  
  13.       
  14.     protected Context context = null;  
  15.       
  16.     public void initalize() throws NamingException  
  17.     {         
  18.         Properties props = new Properties();  
  19.         try{  
  20.             props.load(this.getClass().getResourceAsStream("jndi.properties"));   
  21.         }catch(IOException ex){  
  22.             LOGGER.error("Can't load jndi.properties.", ex);  
  23.         }  
  24.         context = new InitialContext(props);          
  25.     }  
  26.   
  27.     public Context getJndiContext() throws NamingException {  
  28.         if(context == null){  
  29.             initalize();  
  30.         }  
  31.         return context;  
  32.     }     
  33.   
  34. }  

 

 

使用JNDI拿到连接对象以及其他资源。

 

[java]  view plain copy
  1. public static void main(String[] args) throws NamingException, JMSException {  
  2.           
  3.         JndiFactory factory = new JndiFactory();          
  4.           
  5.         Context ctx = factory.getJndiContext();  
  6.           
  7.         //获取连接工厂。  
  8.         ConnectionFactory factory1 = (ConnectionFactory) ctx.lookup("con1");  
  9.         ConnectionFactory factory2 = (ConnectionFactory) ctx.lookup("con2");  
  10.           
  11.         //创建连接对象  
  12.         Connection conn = factory1.createConnection();  
  13.           
  14.         //获取Queue对象。  
  15.         Destination queue = (Queue) ctx.lookup("MyQueue");        
  16.           
  17.         //获取Topic对象。  
  18.         Destination topic = (Topic) ctx.lookup("MyTopic");  
  19.           
  20.         System.out.println(conn);                 
  21.         System.out.println(queue);        
  22.         System.out.println(topic);  
  23.           
  24.     }  

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值