一、安装启动参考:
http://blog.sina.com.cn/s/blog_a459dcf501017oml.html
二、注意事项
1.关于API方法中参数的具体含义可参考java EE 6 API文档
2.JMS1.0.2 规范中定义了两种消息传递域:点对点(PTP)消息传递域和发布/订阅消息传递域。
点对点消息传递域的特点如下:
• 每个消息只能有一个消费者。
• 消息的生产者和消费者之间没有时间上的相关性。无论消费者在生产者发送消息的时候是否处于运行状态,它都可以提取消息。
发布/订阅消息传递域的特点如下:
• 每个消息可以有多个消费者。
• 生产者和消费者之间有时间上的相关性。订阅一个主题的消费者只能消费自它订阅之后发布的消息。JMS 规范允许客户创建持久订阅,这在一定程度上放松了时间上的相关性要求。持久订阅允许消费者消费它在未处于激活状态时发送的消息。
在点对点消息传递域中,目的地被成为队列(queue);在发布/订阅消息传递
域中,目的地被成为主题(topic)。
3.topic时先调用FirstReceiver类再调用FirstSender类,queue时无先后顺序(看懂了注意事项第二条这条可滤去)。
三、java代码
1.FirstReceiver类
package com.maxLv.activemq;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class FirstReceiver {
public static void main(String[] args){
// 连接工厂,JMS 用它创建连接
ConnectionFactory connectionFactory;
// JMS 客户端到 JMS Provider 的连接
Connection connection = null;
// 一个发送消息的线程
Session session;
// 消息的目的地
Destination destination;
// 消息接受者
MessageConsumer messageConsumer;
// 构造函数传入用户名、密码、brokerURL进行初始化连接
connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://localhost:61616");
try {
// 构造从工厂得到连接对象
connection = connectionFactory.createConnection();
// 启动
connection.start();
// 获取连接操作{非事务性会话时(Boolean.FALSE)消息何时被确认由AUTO_ACKNOWLEDGE、CLIENT_ACKNOWLEDGE、DUPS_ACKNOWLEDGE三种应答模式决定}
session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
// 获取session注意参数值First-Queue(First-Topic)是一个服务器的queue(topic),须在ActiveMQ的console配置
destination = session.createQueue("First-Queue");
// destination = session.createTopic("First-Topic");
messageConsumer = session.createConsumer(destination);
while (true) {
// 设置接受者接受消息的时间(500s)
TextMessage textMessage = (TextMessage) messageConsumer.receive(500000);
if (null != textMessage) {
System.out.println("Message received:" + textMessage.getText());
}else {
break;
}
}
} catch (JMSException e) {
e.printStackTrace();
} finally {
if (null != connection) {
try {
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
}
2.FirstSender类
package com.maxLv.activemq;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class FirstSender {
private static final int SEND_NUMBER = 20;
//发送消息
private static void sendMessage(Session session,MessageProducer messageProducer)
throws JMSException{
int times = 1;
while (times <= SEND_NUMBER) {
TextMessage textMessage = session.createTextMessage("The Message Of" +" "+ times);
System.out.println("Message Send:The ActiveMQ Message Of" +" "+ times);
messageProducer.send(textMessage);
times ++;
}
}
public static void main(String[] args){
// ConnectionFactory :连接工厂,JMS 用它创建连接
ConnectionFactory connectionFactory;
// Connection :JMS 客户端到JMS Provider 的连接
Connection connection = null;
// Session: 一个发送或接收消息的线程
Session session;
// Destination :消息的目的地
Destination destination;
// 消息发送者
MessageProducer messageProducer;
// 构造函数传入用户名、密码、brokerURL进行初始化连接
connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://localhost:61616");
try {
// 构造从工厂得到连接
connection = connectionFactory.createConnection();
// 启动
connection.start();
// 获取连接操作{事务性会话时(Boolean.TRUE)消息自动确认}
session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
// 获取session注意参数值First-Queue(First-Topic)是一个服务器的queue(topic),须在ActiveMQ的console配置
destination = session.createQueue("First-Queue");
// destination = session.createTopic("First-Topic");
messageProducer = session.createProducer(destination);
// 发送消息
sendMessage(session, messageProducer);
session.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != connection) {
try {
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
}
分享到:
相关推荐
这个"AjaxPro简单Demo适合初学者"是一个很好的起点,帮助新手理解如何在实际项目中运用AjaxPro技术来提升Web应用的用户体验。 首先,AjaxPro的核心特性是它可以将服务器端的.NET方法封装为Ajax调用,使得前端...
"demo dsp_初学"和"demo_dsp初学"进一步强调了这是一份面向初学者的DSP教学资源,"demo"在这里指演示或示例,暗示了资源中可能包含可运行的代码示例。"demo_dtft"则直接点明了离散时间傅里叶变换这一核心知识点会被...
这个"B站登录demo"是一个专为初学者设计的项目,旨在帮助他们理解...通过这个"B站登录demo"项目,初学者不仅可以学习到网页开发的基础知识,还能实际动手操作,提升问题解决能力,为后续深入学习Web开发打下坚实基础。
这个"ssm初学者demo"项目是一个适合初学者学习SSM架构的基础示例,它可以帮助新手快速理解和掌握这三大框架的基本用法。 1. **Spring框架**:Spring是Java企业级应用的核心框架,提供了IOC(Inversion of Control,...
标题“适合初学websocket者的websocketDemo”暗示了这个项目是一个用于教授WebSocket基础的实例,特别适合对网络编程感兴趣的初学者。通过这个Demo,你可以了解到WebSocket协议的基本概念,以及如何在Java应用中集成...
本AjaxDEMO适合初学者学习,旨在提供一个基础的实践平台,帮助理解Ajax的工作原理及其在实际开发中的应用。** ### 1. Ajax基础知识 Ajax的核心是JavaScript对象XMLHttpRequest,它允许在后台与服务器端通信。当...
初学者可以通过DEMO学习如何创建和使用类,理解类与对象的关系,以及如何通过继承和多态实现代码复用和扩展。 3. **图形用户界面(GUI)**:Java SE提供了丰富的GUI库,如Swing和JavaFX,用于创建桌面应用的交互...
【标题】"demo项目java初学者可以看看"指的是一个适合Java初学者的示例项目,旨在帮助新手了解和学习Java编程。这样的项目通常包含了各种基础和进阶的编程概念,以便学习者通过实际操作来加深理解。 【描述】"java ...
在这个“springcloud的简单demo”中,我们将重点关注Eureka服务发现组件的集成,这是一个非常适合初学者上手的实例。 1. **Eureka**:Eureka是Netflix开发的服务注册与发现组件,它是SpringCloud生态中的关键部分。...
总结来说,这个"初学者 Json Demo 实例"是一个适合初学者的教程,旨在通过实际操作帮助学习者掌握JSON的基本使用,包括JSON的结构、解析与生成,以及如何将JSON数据与GridView控件结合。通过研究提供的"SolutionDemo...
通过Demo,初学者可以学习如何构建简单的交互流程,理解条件逻辑和变量的运用。 此外,Axure支持自定义函数和脚本,这使得原型能够实现更高级的逻辑。初学者可以在Demo中探索如何使用这些高级功能,以提高原型的...
Dome模式的详细代码!很适合刚刚开始接触java的学者.....
这个"drools初学者的demo"是一个非常适合入门的学习资源,旨在帮助新手快速理解drools的工作原理和使用方法。 Drools的核心概念包括规则(Rule)、事实(Fact)、工作内存(Working Memory)和规则引擎(Rule ...
android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo...
微信小程序demo:简易抽奖(源代码+截图)微信小程序demo:简易抽奖(源代码+截图)微信小程序demo:简易抽奖(源代码+截图)微信小程序demo:简易抽奖(源代码+截图)微信小程序demo:简易抽奖(源代码+截图)微信小程序demo...
50-projects-main.rar javascript的demo例样,适合初学者使用
这个DEMO是为了帮助初学者理解和入门JSF 1.2而设计的。 **JSF 1.2 的核心概念** 1. **组件(Components)**:JSF中的组件是UI的基本构建块,它们可以是简单的HTML元素,如按钮和输入框,也可以是复杂的自定义组件...
这个"quartz框架demo"是专为初学者设计的,旨在帮助他们快速理解和上手Quartz的使用。 首先,我们要了解Quartz的核心概念: 1. **Job**:在Quartz中,Job代表一个具体的任务,你需要实现`org.quartz.Job`接口,并...
这个"Python初学者-适合新手小白学习python练手的demo源码"集合提供了31个示例程序,旨在帮助初学者逐步理解和掌握Python编程基础。 首先,Python的基础知识包括变量、数据类型、运算符和控制结构。变量是存储信息...
总之,这个"C++入门Demo"是一个很好的起点,适合希望在Android平台上使用C++的初学者。通过逐步学习和实践,你将能够掌握C++的基础知识,并逐步提升到更高级的主题,如STL(标准模板库)、多线程编程和C++11及更高...