文档章节

ActiveMQ入门实例

b
 birenyong
发布于 2016/09/23 14:37
字数 644
阅读 5
收藏 0

示例项目目录,其中jar包在下载的activeMQ安装文件的lib目录下 输入图片说明

先编写消息发送者Sender

public class Sender {
	private static final int SEND_TIMES = 5;
	
	public static void main(String[] args) {
		// 连接工厂。连接地址,用户名,密码都是用的默认的。
		ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER
				, ActiveMQConnection.DEFAULT_PASSWORD, ActiveMQConnection.DEFAULT_BROKER_URL);
		Connection conn = null;
		try {
			// 创建连接 当一个Connection被创建时,它的传输默认是关闭的,必须使用start方法开启
			conn = factory.createConnection();
			// 启动
			conn.start();
			// 会话   接收或者发送消息的线程
			//param1 是否开启事物 , param2 签收模式
			Session session = conn.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
			// 创建一个消息队列(Destination是一个客户端用来指定生产消息目标和消费消息来源的对象) 在程序中可以使用多个Queue和Topic。
			// 在PTP模式中,Destination被称作Queue即队列;在Pub/Sub模式,Destination被称作Topic即主题
			Destination destination = session.createQueue("TestQueue");
			// 创建一个消息生产者 用来向Destination发送消息
			MessageProducer producer = session.createProducer(destination);
			for (int i = 0; i < SEND_TIMES; i++) {
				TextMessage messageText = session.createTextMessage("activeMQ发送消息:"+i);
				// 消息定时发送
//				messageText.setStringProperty(ScheduledMessage.AMQ_SCHEDULED_CRON, "1 14 23 9 * ");
				//其中deliveryMode为传送模式,priority为消息优先级,timeToLive为消息过期时间。
				producer.send(messageText);
			}
			session.commit();
		} catch (JMSException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally{
			if(null != conn){
				try {
					conn.close();
				} catch (JMSException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		
	}
}

消息接受者Receive

public class Receive {
	public static void main(String[] args) {
		ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER
				, ActiveMQConnection.DEFAULT_PASSWORD, ActiveMQConnection.DEFAULT_BROKER_URL);
		Connection conn = null;
		try {
			//当一个Connection被创建时,它的传输默认是关闭的,必须使用start方法开启
			conn = factory.createConnection();
			conn.start();
			Session session = conn.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
			Destination destination = session.createQueue("TestQueue");
			// 用来从Destination接收消息
			MessageConsumer consumer = session.createConsumer(destination);
			while(true){
				TextMessage message = (TextMessage) consumer.receive();
				if(null != message){
					System.out.println(message.getText());
				}
			}
		} catch (JMSException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally{
			if(null != conn){
				try {
					conn.close();
				} catch (JMSException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}

好了,demo的代码就这么多了。

写demo的时候突然想写个定时的消息发送,用来做类似quartz定时任务的功能。在用cron表达式的时候遇上个问题:我用网上的cron表达式生成器生成的cron表达式是不行的,从quartz里边复制过来的cron表达式也不能用。于是网上百度cron表达式 从这里拿最简单的cron表达式来用还是不行。最后发现activemq里边用的是crontab中的表达式而是不是quartz里边的cron表达式。真的是坑大了。其实官网的描述里边有一个cron表达式的链接,是到维基百科的,里面全是英文,怪只怪自己英文太差,看2行就没看下去了。哈哈。

© 著作权归作者所有

b
粉丝 0
博文 6
码字总数 2586
作品 0
广州
程序员
私信 提问

暂无文章

WebApi数据验证——编写自定义数据注解(Data Annotations)

配合ModelState使用,关于使用方法,参考微软文档 https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-api 自定义Data ......

刘昌鑫
17分钟前
0
0
好程序员web前端分享想要学习前端需要学那些课程

仔细思考了一下如何回答好这个话题,其实前端是一个涵盖面非常之广泛的一个职位,所需知识体系非常庞杂,与传统语言“想要精一行,必先通一门” 有很大差别, 前端是”想要精一行,必先通十行...

好程序员IT
26分钟前
0
0
Java8

package com.shi.lambda;import java.util.Arrays;import java.util.List;import org.junit.Test;import com.shi.model.Employee;/** * 初始化案例 * @author xiaosh......

小小小施爷
42分钟前
2
0
c# 动态编译代码

有时候做计算一些东西时候,算法一直变更,写在程序需要一直调整,因此算法写在cs文件,然后动态调用内部的方法去计算判断,只需变更cs文件即可。 using Microsoft.CSharp; using System; us...

朝如青丝暮成雪
42分钟前
4
0
tomcat 与 spring boot 设置虚拟路径

tomcat 设置虚拟路径 <Context path="/uploadDir" docBase="/data"/>path是请求访问的路径docBase是服务器存储文件的路径,Linux 根目录下 data spring boot 虚拟路径设置 registry.addRe......

kdy1994
48分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部