发送信息源代码:
public class QueueSender {
public static void main(String[] args) {
Properties props = new Properties();
/*
JNDI 将客户端接口与服务提供商需要的接口分开为不同的包。比如,客户端程序只需要使用javax.naming包中提供的类,而服务提供商可能需要 javax.naming和javax.naming.spi两中包。这样分开可以使客户和服务器端只专注于与自身有关的类信息。
*/
//初始化上下文工厂,服务URL
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
try {
//通过JNDI API初始化上下文
InitialContext ctx = new InitialContext(props);
//通过JNDI的 lookup("name")获取QueueConnectionFactory对象。
QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("QueueConnectionFactory");
QueueConnection conn = factory.createQueueConnection();
QueueSession session = conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
//获取服务器地址,并发送信息给服务器。
Destination destination = (Destination) ctx.lookup("queue/itcastQueue");
MessageProducer producer = session.createProducer(destination);
TextMessage msg = session.createTextMessage("您好,这是我的第一个消息驱动Bean");
producer.send(msg);
session.close();
conn.close();
System.out.println("发送完成");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
接受信息源代码:
@MessageDriven(activationConfig={
@ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),
@ActivationConfigProperty(propertyName="destination", propertyValue="queue/itcastQueue")
})
public class QueueReceiveBean implements MessageListener {
public void onMessage(Message msg) {
if(msg instanceof TextMessage){
TextMessage message = (TextMessage) msg;
try {
System.out.println(message.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
topic实现过程和QUEUE相同,只需将相应地方的Queue替换成Topic就行。