您的位置:首页 > 运维架构 > Tomcat

基于Tomcat + JNDI + ActiveMQ实现JMS的点对点消息传送

2017-11-28 11:29 821 查看
首先:在你的tomcat conf的context.xml 文件的Context标签下配置:

<Resource name="queue/connectionFactory"
auth="Container"
type="org.apache.activemq.ActiveMQConnectionFactory"
description="JMS Connection Factory"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
brokerURL="tcp://localhost:61616"
brokerName="LocalActiveMQBroker" />

<Resource name="queue/queue0"
auth="Container"
type="org.apache.activemq.command.ActiveMQQueue"
description="My Queue"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
physicalName="TomcatQueue" />


然后代码中下载

ActiveMQ的客户端相关包:


<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
<version>5.14.0</version>
</dependency>


然后写测试代码:

import javax.jms.DeliveryMode;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.InitialContext;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/jms/tests")
@ResponseBody
public class TestAction {

/**
* 发送消息
*/
@RequestMapping("/send")
public void send() {
try {
// get the initial context
InitialContext context = new InitialContext();

// lookup the queue object
Queue queue = (Queue) context.lookup("java:comp/env/queue/queue0");

// lookup the queue connection factory
QueueConnectionFactory conFactory = (QueueConnectionFactory) context
.lookup("java:comp/env/queue/connectionFactory");

// create a queue connection
QueueConnection queConn = conFactory.createQueueConnection();

// create a queue session
QueueSession queSession = queConn.createQueueSession(false, Session.DUPS_OK_ACKNOWLEDGE);

// create a queue sender
QueueSender queSender = queSession.createSender(queue);
queSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

// create a simple message to say "Hello World"
TextMessage message = queSession.createTextMessage("Hello World");

// send the message
queSender.send(message);

// print what we did
System.out.println("Message Sent: " + message.getText());

// close the queue connection
queConn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

/**
* 接收消息
*/
@RequestMapping("/reveive")
public void reveive() {
try {
// get the initial context
InitialContext context = new InitialContext();

// lookup the queue object
Queue queue = (Queue) context.lookup("java:comp/env/queue/queue0");

// lookup the queue connection factory
QueueConnectionFactory conFactory = (QueueConnectionFactory) context
.lookup("java:comp/env/queue/connectionFactory");

// create a queue connection
QueueConnection queConn = conFactory.createQueueConnection();

// create a queue session
QueueSession queSession = queConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

// create a queue receiver
QueueReceiver queReceiver = queSession.createReceiver(queue);

// start the connection
queConn.start();

// receive a message
TextMessage message = (TextMessage) queReceiver.receive();

// print the message
System.out.println("Message Received: " + message.getText());

// close the queue connection
queConn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


最后访问链接,先请求发送消息方法,然后请求接收消息方法,打开你的activemq服务器,可观察消息的发送与接收

ok....测试例子通过

该例子使用JMS规范提供的通用接口来写的。。。

参考:https://howtodoinjava.com/jms/jms-point-to-point-message-example/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: