使用Java MSMQ进行Java Marshalling的教程
最编程
2024-08-06 17:15:56
...
该篇文章将向读者展示,怎样使用java去操作MSMQ(Windows自带的一个消息队列)。分为发送和接收消息,在操作MSMQ时,我们需要下载MsmqJava文件,该文件包含一个jar包和一个dll文件。下面将逐步教您怎样编写一个MSMQ程序。
第一步:开启MSMQ
Windows默认是没有开启MSMQ功能的,需要我们自己手动去开启,开启方法如下:
注意:点击“启动或关闭Windows功能”,然后在弹出的选择框中找到MSMQ即可(这就不详细说了,相信您能办到)。
第二步:创建一个测试队列
右击“我的电脑”点击管理。在管理中找到“服务和应用程序”项,点击“消息队列”。然后右击“专用队列”,选择“新建”/“专用队列”。
第三步:设置新建专用队列权限
在“专用队列”中,找到刚才创建的新队列,右击选择“属性”。在属性框中,选择“安全”页,设置“Everyone”权限为完全控制。
第四步:下载MsmqJava
打开浏览器,输入“http://msmqjava.codeplex.com/”,然后下载MsmqJava包,然后解压。
Java利用MsmqJava操作MSMQ消息队列
该项目使用Eclipse进行开发,jdk1.6,同时引入了日志框架(Slf4j、log4j)、MsmqJava.dll、MsmqJava.jar。
基础代码(BaseMessage.java)
package com.huangx;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 基础类
*
* @author Administrator
* @date 2017-06-23 22:01:27
*/
public abstract class BaseMessage {
private static final Logger LOG = LoggerFactory.getLogger(BaseMessage.class);
/**
* 队列名称。其中:192.32.12.76为本机的IP地址(经测试不能使用127.0.0.1,不然会报错)
* private$\\javaTest是队列名字
*/
protected static final String QUEUE_NAME = "direct=tcp:192.168.1.115\\private$\\javaTest";
static {
try {
LOG.debug("开始加载DLL文件...");
System.loadLibrary("MsmqJava");
LOG.debug("加载DLL文件成功");
} catch (Exception e) {
LOG.error("加载DLL失败,原因:" + e.getMessage(), e);
}
}
/**
* 执行业务逻辑,由具体业务实现
*/
public abstract void execute();
}
log4j.properties
log4j.rootLogger=debug,Console
log4j.logger.org.apache.zookeeper=warn,Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d %-5p [%c] - %m%n
Java发送代码(SendMessage.java)
package com.huangx;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ionic.Msmq.Message;
import ionic.Msmq.Queue;
/**
* 发送消息到MSMQ队列
*
* @author Administrator
* @date 2017-06-23 21:38:11
*/
public class SendMessage extends BaseMessage {
private static final Logger LOG = LoggerFactory.getLogger(SendMessage.class);
@Override
public void execute() {
try {
LOG.debug("开始发送消息...");
// 创建队列
Queue queue = new Queue(QUEUE_NAME);
// 创建消息
String label = "testMessage";
String body = "Hello, World!";
byte[] correlationId = { 0, 2, 4, 6, 8, 9 };
Message msg = new Message(body, label, correlationId);
// 发送消息
LOG.debug("发送消息[label={}, body={}]", msg.getLabel(), msg.getBodyAsString());
queue.send(msg);
LOG.debug("发送消息成功^_^");
} catch (Exception e) {
LOG.error("发送消息失败!原因:" + e.getMessage(), e);
}
}
public static void main(String[] args) {
new SendMessage().execute();
}
}
编写Java接收代码(ReceiveMessage.java)
package com.huangx;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ionic.Msmq.Message;
import ionic.Msmq.Queue;
/**
* 接收消息
*
* @author Administrator
* @date 2017-06-23 22:19:49
*/
public class ReceiveMessage extends BaseMessage {
private static final Logger LOG = LoggerFactory.getLogger(ReceiveMessage.class);
@Override
public void execute() {
try {
// 创建队列
Queue queue = new Queue(QUEUE_NAME);
// 接收消息
Message message = queue.receive();
LOG.debug("接收到消息[label={}, body={}]",
message.getLabel(), message.getBodyAsString());
} catch (Exception e) {
LOG.debug(e.getMessage(), e);
}
}
public static void main(String[] args) {
new ReceiveMessage().execute();
}
}
推荐阅读
-
Java 8新特性探究(十三)JavaFX 8新特性以及开发2048游戏-JavaFX历史## 跟java在服务器端和web端成绩相比,桌面一直是java的软肋,于是Sun公司在2008年推出JavaFX,弥补桌面软件的缺陷,请看下图JavaFX一路走过来的改进 从上图看出,一开始推出时候,开发者需使用一种名为JavaFX Script的静态的、声明式的编程语言来开发JavaFX应用程序。因为JavaFX Script将会被编译为Java bytecode,程序员可以使用Java代码代替。 JavaFX 2.0之后的版本摒弃了JavaFX Script语言,而作为一个Java API来使用。因此使用JavaFX平台实现的应用程序将直接通过标准Java代码来实现。 JavaFX 2.0 包含非常丰富的 UI 控件、图形和多媒体特性用于简化可视化应用的开发,WebView可直接在应用中嵌入网页;另外 2.0 版本允许使用 FXML 进行 UI 定义,这是一个脚本化基于 XML 的标识语言。 从JDK 7u6开始,JavaFx就与JDK捆绑在一起了,JavaFX团队称,下一个版本将是8.0,目前所有的工作都已经围绕8.0库进行。这是因为JavaFX将捆绑在Java 8中,因此该团队决定跳过几个版本号,迎头赶上Java 8。 ##JavaFx8的新特性 ## ###全新现代主题:Modena 新的Modena主题来替换原来的Caspian主题。不过在Application的start方法中,可以通过setUserAgentStylesheet(STYLESHEET_CASPIAN)来继续使用Caspian主题。 参考http://fxexperience.com/2013/03/modena-theme-update/ ###JavaFX 3D 在JavaFX8中提供了3D图像处理API,包括Shape3D (Box, Cylinder, MeshView, Sphere子类),SubScene, Material, PickResult, LightBase (AmbientLight 和PointLight子类),SceneAntialiasing等。Camera类也得到了更新。从JavaDoc中可以找到更多信息。 ###富文本 强化了富文本的支持 ###TreeTableView ###日期控件DatePicker 增加日期控件 ###用于 CSS 结构的公共 API
-
学习使用Java 8中的Nashorn脚本引擎解析教程
-
使用Java进行3D建模的实现
-
使用apktool和java_apktool进行APK反编译的方法
-
使用Java进行网页跳转的方法
-
使用Java进行多元回归分析的方法
-
使用Java MSMQ进行Java Marshalling的教程
-
必看!让你的 Java 单元测试变得更简单——Junit 的使用教程
-
简化你的Java编程:使用JUnit进行单元测试
-
全面指南:使用Java进行视频压缩的实现