1.发送者
/**
* 测试消息发送者
*/
public class ProdecerTest3 {
public void testProdecer(String msgTest){
//1.定义链接工厂
ConnectionFactory connectionFactory=null;
//2.定义链接对象
Connection connection=null;
//3.定义回话
Session session=null;
//4.定义目的地
Destination destination=null;
//5.定义消息发送者
MessageProducer messageProducer=null;
//6.定义消息
Message message=null;
try {
/**
* userName:访问 ActiveMQ 服务的用户名。用户密码。默认的为 admin。用户名可以通过jetty-ream.properties 文件进行修改
* password:访问 ActiveMQ 服务的用户名。用户密码。默认的为 admin。用户名可以通过jetty-ream.properties 文件进行修改
* brokerURL:访问 ActiveMQ 服务的路径地址。路径结构为:协议名://主机地址:端口号
*/
//1.创建工厂对象
connectionFactory=new ActiveMQConnectionFactory("admin","admin","tcp://192.168.92.135:61616");
//2.创建连接对象
connection=connectionFactory.createConnection();
//启动连接
connection.start();
//3.创建会话对象
/**
* transacted:是否使用事务 可选值为:true|false
* true:使用事务 当设置次变量值。Session.SESSION_TRANSACTED
* false:不适用事务,设置次变量则 acknowledgeMode 参数必须设置
* acknowledgeMode:
* Session.AUTO_ACKNOWLEDGE:自动消息确认机制
* Session.CLIENT_ACKNOWLEDGE:客户端确认机制
* Session.DUPS_OK_ACKNOWLEDGE:有副本的客户端确认消息机制
*/
session=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
//4.创建目的地:目的地名称即队列的名称。消息的消费者需要通过此名称访问对应的队列
destination=session.createQueue("my-destination");
//5.创建消息发送者对象
messageProducer=session.createProducer(destination);
//6.创建消息对象
message=session.createTextMessage(msgTest);
//7.发送消息
messageProducer.send(message);
}catch (Exception e){
e.printStackTrace();
}finally {
if(messageProducer!=null){
try {
messageProducer.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
if(session!=null){
try {
session.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
}
2.消费者
/**
* 测试消息消费者
*/
public class ConsumerTest3 {
public void testConsumer(){
//1.定义链接工厂
ConnectionFactory connectionFactory=null;
//2.定义链接对象
Connection connection=null;
//3.定义回话
Session session=null;
//4.定义目的地
Destination destination=null;
//5.定义消息消费者
MessageConsumer messageConsumer=null;
//6.定义消息
Message message=null;
try {
/**
* userName:访问 ActiveMQ 服务的用户名。用户密码。默认的为 admin。用户名可以通过jetty-ream.properties 文件进行修改
* password:访问 ActiveMQ 服务的用户名。用户密码。默认的为 admin。用户名可以通过jetty-ream.properties 文件进行修改
* brokerURL:访问 ActiveMQ 服务的路径地址。路径结构为:协议名://主机地址:端口号
*/
//1.创建工厂对象
connectionFactory=new ActiveMQConnectionFactory("admin","admin","tcp://192.168.92.135:61616");
//2.创建连接对象
connection=connectionFactory.createConnection();
//启动连接
connection.start();
//3.创建会话对象
/**
* transacted:是否使用事务 可选值为:true|false
* true:使用事务 当设置次变量值。Session.SESSION_TRANSACTED
* false:不适用事务,设置次变量则 acknowledgeMode 参数必须设置
* acknowledgeMode:
* Session.AUTO_ACKNOWLEDGE:自动消息确认机制
* Session.CLIENT_ACKNOWLEDGE:客户端确认机制
* Session.DUPS_OK_ACKNOWLEDGE:有副本的客户端确认消息机制
*/
session=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
//4.创建目的地:目的地名称即队列的名称。消息的消费者需要通过此名称访问对应的队列
destination=session.createQueue("my-destination");
//5.创建消息消费者对象
messageConsumer=session.createConsumer(destination);
//6.接收消息
//message=messageConsumer.receive();
//消费者注册监听事件:用于监听ActiveMQ服务中的消息,然后ActiveMQ服务通过回调方法返回消息给consumer
messageConsumer.setMessageListener(new MessageListener() {
@Override
//ActiveMQ 回调的方法onMessage。通过该方法将消息传递到 consumer
public void onMessage(Message message) {
//7.消费处理消息
String msg= null;
try {
msg = ((TextMessage)message).getText();
} catch (JMSException e) {
e.printStackTrace();
}
System.out.println("从ActiveMQ服务中获取文本消息:"+msg);
}
});
}catch (Exception e){
e.printStackTrace();
}
}
}