Chinaunix首页 | 论坛 | 博客
  • 博客访问: 713953
  • 博文数量: 147
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 1725
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-22 10:36
文章分类

全部博文(147)

文章存档

2011年(1)

2010年(1)

2009年(35)

2008年(110)

我的朋友

分类: Java

2008-09-13 12:43:40

消息队列是企业级软件解决方案中很主要的服务!
JMS消息类型:
PTP(点对点)消息:这种消息队列可以同时有多个发送者,每个发送着都可以自由的向队列中发送消息,
                被发送的消息按照先发先进的原则一次排列在队列中,先发的消息排列在队列的前面
                排列在队列中的消息可以立即被使用者使用,也可以等一段时间才被使用者使用!通常有队列服务器维持消息的持久化。默认情况按照在队列中次序一次使用,一旦一个消息被使用,该消息就会被从队列中删除,此后下一个消息才会被使用

Pub/Sub(发送-订阅)消息:
          所有发送着可以自由的向队列中发送消息,先发先进的原则排列,这种消息队列会把当前队列中的消息一次广播给当前队列的所有使用者,一个消息可以被多个使用者接受并使用,默认情况下,如果当前队列没有使用者,则队列中消息也自动被丢失,但是有些服务器可以修改配置改变队列的默认行为,使队列在没有使用者时,所有的消息被保留,知道有使用者来消费队列中的消息!
JMS消息队列操作模式:
  同步消息获取 异步消息获取
JBOSS MQ简介:
    在jboss mq上创建队列:birqueue和birqueue1


           name="jboss.mq.destination:service=Queue,name=birqueue">
    
        jboss.mq:service=DestinationManager
    

 

           name="jboss.mq.destination:service=Queue,name=birqueue1">
    
        jboss.mq:service=DestinationManager
    

 


查看:jboss-web console-J2ee domains\jbossmanagement.local\jboss\J2ee Resources\localJMS\Queues
   在jboss mq上创建主题:bitsub


           name="jboss.mq.destination:service=Topic,name=bitsub">
    
     jboss.mq:service=DestinationManager
    

 


JMS消息操作对象体系的创建:
 连接工厂(Factory)->连接(connection)->jms会话(Session)->jms队列操作对象
JMS1.1消息队列的操作
连接工厂类:ConnectionFactory
jms连接:Connection
jms会话:Session
jms队列对象:Queue或者Topic
jms消息生产者:MessageProducer
jms消息消费者:MessageConsumer
消息的发送:
  public class send {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try{
            Context ctx=null;
            MessageProducer sender;
            TextMessage msg;
            String url="jnp://localhost:1099";
            String purl="org.jboss.naming:org.jnp.interfaces";
            String fcy="org.jnp.interfaces.NamingContextFactory";
            Properties p=new Properties();
            p.put(Context.INITIAL_CONTEXT_FACTORY,fcy);
            p.put(Context.PROVIDER_URL,url);
            p.put(Context.URL_PKG_PREFIXES,purl);
            ctx=new InitialContext(p);
            ConnectionFactory qConFactory=(ConnectionFactory)ctx.lookup("ConnectionFactory");
            Connection qCon=qConFactory.createConnection();
            Session session=qCon.createSession(false,Session.AUTO_ACKNOWLEDGE);
            Queue messageQueue=(Queue)ctx.lookup("queue/birqueue");
            sender=session.createProducer(messageQueue);
            msg=session.createTextMessage();
            msg.setText("hello wuxiaoxiao");
            sender.send(msg);
            qCon.close();           
            }catch(Exception e){
            System.out.println(e);
            }
    }

}
查看发送的消息:jboss-web console-System-JMX MBeans-jboss.mq.destination
点击listMessage()下面的invoke按钮会显示具体的方法。
消息的同步接受:
    public class receive {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try{
            Context ctx=null;
            MessageConsumer receiver;
            TextMessage msg;
            String url="jnp://localhost:1099";
            String purl="org.jboss.naming:org.jnp.interfaces";
            String fcy="org.jnp.interfaces.NamingContextFactory";
            Properties p=new Properties();
            p.put(Context.INITIAL_CONTEXT_FACTORY,fcy);
            p.put(Context.PROVIDER_URL,url);
            p.put(Context.URL_PKG_PREFIXES,purl);
            ctx=new InitialContext(p);
            ConnectionFactory qConFactory=(ConnectionFactory)ctx.lookup("ConnectionFactory");
            Connection qCon=qConFactory.createConnection();
            Session session=qCon.createSession(false,Session.AUTO_ACKNOWLEDGE);
            qCon.start();
            Queue messageQueue=(Queue)ctx.lookup("queue/birqueue");
            receiver=session.createConsumer(messageQueue);
            msg=(TextMessage)receiver.receive();
            System.out.println(msg);
            System.out.println("同步接受消息..........");
            qCon.close();           
            }catch(Exception e){
            System.out.println(e);
            }
    }

}
异步接受消息:
   public class Handler implements MessageListener {

    @Override
    public void onMessage(Message m) {
        // TODO Auto-generated method stub
       TextMessage msg=(TextMessage)m;
       System.out.println("接受消息:"+msg.toString());      
    }
}
public class AsyncReceiver {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try{
            Context ctx=null;
            MessageConsumer receiver;
            TextMessage msg=null;
            String url="jnp://localhost:1099";
            String purl="org.jboss.naming:org.jnp.interfaces";
            String fcy="org.jnp.interfaces.NamingContextFactory";
            Properties p=new Properties();
            p.put(Context.INITIAL_CONTEXT_FACTORY,fcy);
            p.put(Context.PROVIDER_URL,url);
            p.put(Context.URL_PKG_PREFIXES,purl);
            ctx=new InitialContext(p);
            ConnectionFactory qConFactory=(ConnectionFactory)ctx.lookup("ConnectionFactory");
            Connection qCon=qConFactory.createConnection();
            Session session=qCon.createSession(false,Session.AUTO_ACKNOWLEDGE);
            qCon.start();
            Queue messageQueue=(Queue)ctx.lookup("queue/birqueue");
            receiver=session.createConsumer(messageQueue);
            receiver.setMessageListener(new Handler());   
            System.out.println("异步接受消息.........");
            }catch(Exception e){
            System.out.println(e);
            }
    }
}



阅读(11441) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-07-11 17:08:04

楼上的QQ多少,我的41164314,想多多请教

chinaunix网友2010-01-12 14:30:25

这位兄弟干嘛这么注重文字本身呢?不管文章是从书上总结的还是转载别人的 我只是遇到一些好的文章就会收集和别人分享,难道你学习了知识,还非得去追朔到这个知识的起源人是谁吗?互相分享吗,大家共同学到知识才重要,何必这么在意文字是谁写的?...呵呵

chinaunix网友2010-01-10 11:57:15

抄来的要注明是抄来的,没素质。