消息队列是企业级软件解决方案中很主要的服务!
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) |