Java 编写一个简单的应用程序将消息注入队列
我正试图编写一个简单的Java程序,将MQ消息注入队列。我对使用Java编写MQ队列非常缺乏经验,有几个问题Java 编写一个简单的应用程序将消息注入队列,java,ibm-mq,Java,Ibm Mq,我正试图编写一个简单的Java程序,将MQ消息注入队列。我对使用Java编写MQ队列非常缺乏经验,有几个问题 我可以从windows计算机连接到unix机箱上的unix队列吗 当我尝试运行应用程序时,我得到一个。。。。 java.lang.UnsatisfiedLinkError:java.library.path中没有mqjbnd05 从我在谷歌上能找到的声音来看,我缺少了某种资源。我想我遇到了这个错误,可能是因为我不允许从windows连接到队列 任何关于如何实现我正在做的事情或帮助的好例子
public class MQInject {
private MQQueueManager _queueManager = null;
private Hashtable params = null;
public int port = 1414;
public static final String hostname = "UQMYPOSIS1";
public static final String channel = "MQTX1012.MQTX1013";
public static final String qManager = "MQTX1013";
public static final String outputQName = "IIS.TLOG.5";
public MQInject(){
super();
}
public void init(){
//Set MQ connection credentials to MQ Envorinment.
MQEnvironment.hostname = hostname;
MQEnvironment.channel = channel;
MQEnvironment.port = port;
//MQEnvironment.userID = "";
//QEnvironment.password = password;
//set transport properties.
MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_CLIENT);
try {
//initialize MQ manager.
_queueManager = new MQQueueManager(qManager);
} catch (MQException e) {
e.printStackTrace();
}
}
public static void main(String[] args)
{
MQInject write = new MQInject();
try
{
write.selectQMgr();
write.write();
}
catch (IllegalArgumentException e)
{
System.out.println("Usage: java MQWrite <-h host> <-p port> <-c channel> <-m QueueManagerName> <-q QueueName>");
System.exit(1);
}
catch (MQException e)
{
System.out.println(e);
System.exit(1);
}
}
private void selectQMgr() throws MQException
{
_queueManager = new MQQueueManager(qManager);
}
private void write() throws MQException{
String line;
int lineNum=0;
int openOptions = MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING;
try {
MQQueue queue = _queueManager.accessQueue( outputQName,
openOptions,
null, // default q manager
null, // no dynamic q name
null ); // no alternate user id
DataInputStream input = new DataInputStream(System.in);
System.out.println("MQWrite v1.0 connected");
System.out.println("and ready for input, terminate with ^Z\n\n");
// Define a simple MQ message, and write some text in UTF format..
MQMessage sendmsg = new MQMessage();
sendmsg.format = MQC.MQFMT_STRING;
sendmsg.feedback = MQC.MQFB_NONE;
sendmsg.messageType = MQC.MQMT_DATAGRAM;
sendmsg.replyToQueueName = "ROGER.QUEUE";
sendmsg.replyToQueueManagerName = qManager;
MQPutMessageOptions pmo = new MQPutMessageOptions(); // accept the defaults, same
// as MQPMO_DEFAULT constant
while ((line = input.readLine()) != null){
sendmsg.clearMessage();
sendmsg.messageId = MQC.MQMI_NONE;
sendmsg.correlationId = MQC.MQCI_NONE;
sendmsg.writeString(line);
// put the message on the queue
queue.put(sendmsg, pmo);
System.out.println(++lineNum + ": " + line);
}
queue.close();
_queueManager.disconnect();
}catch (com.ibm.mq.MQException mqex){
System.out.println(mqex);
}
catch (java.io.IOException ioex){
System.out.println("An MQ IO error occurred : " + ioex);
}
}
}
公共类MQInject{
专用MQQueueManager _queueManager=null;
私有哈希表参数=null;
公共int端口=1414;
公共静态最终字符串hostname=“UQMYPOSIS1”;
公共静态最终字符串通道=“MQTX1012.MQTX1013”;
公共静态最终字符串qManager=“MQTX1013”;
公共静态最终字符串outputQName=“IIS.TLOG.5”;
公共MQInject(){
超级();
}
公共void init(){
//将MQ连接凭据设置为MQ环境。
MQEnvironment.hostname=主机名;
MQEnvironment.channel=通道;
MQEnvironment.port=端口;
//MQEnvironment.userID=“”;
//QEnvironment.password=密码;
//设置传输属性。
MQEnvironment.properties.put(MQC.TRANSPORT_属性,MQC.TRANSPORT_MQSERIES_客户端);
试一试{
//初始化MQ管理器。
_queueManager=新的MQQueueManager(qManager);
}捕获(MQE异常){
e、 printStackTrace();
}
}
公共静态void main(字符串[]args)
{
MQInject write=新MQInject();
尝试
{
write.selectQMgr();
write.write();
}
捕获(IllegalArgumentException e)
{
System.out.println(“用法:javamqwrite”);
系统出口(1);
}
捕获(MQE异常)
{
系统输出打印ln(e);
系统出口(1);
}
}
私有void selectQMgr()引发MQException
{
_queueManager=新的MQQueueManager(qManager);
}
private void write()引发MQException{
弦线;
int lineNum=0;
int openOptions=MQC.MQOO_输出+MQC.MQOO_失败(如果停止);
试一试{
MQQueue queue=\u queueManager.accessQueue(outputQName,
openOptions,
null,//默认q管理器
null,//没有动态q名称
null);//没有备用用户id
DataInputStream输入=新的DataInputStream(System.in);
System.out.println(“连接了MQWrite v1.0”);
System.out.println(“并准备好输入,以^Z终止\n\n”);
//定义一个简单的MQ消息,并以UTF格式写入一些文本。。
MQMessage sendmsg=新MQMessage();
sendmsg.format=MQC.MQFMT_字符串;
sendmsg.feedback=MQC.MQFB_NONE;
sendmsg.messageType=MQC.MQMT_数据报;
sendmsg.replyToQueueName=“ROGER.QUEUE”;
sendmsg.replyToQueueManagerName=qManager;
MQPutMessageOptions pmo=new MQPutMessageOptions();//接受默认值,相同
//作为MQPMO_默认常量
而((line=input.readLine())!=null){
sendmsg.clearMessage();
sendmsg.messageId=MQC.MQMI_NONE;
sendmsg.correlationId=MQC.MQCI__NONE;
sendmsg.writeString(行);
//将消息放入队列
queue.put(sendmsg,pmo);
System.out.println(++lineNum+“:”+line);
}
queue.close();
_queueManager.disconnect();
}捕获(com.ibm.mq.MQException-mqex){
System.out.println(mqex);
}
捕获(java.io.IOException-ioex){
System.out.println(“发生MQ IO错误:“+ioex”);
}
}
}
对于您的第一个问题,是的,您可以在UNIX主机上运行队列管理器,而在Windows主机上运行的客户端可以访问该队列管理器
对于第二个问题,mqjbnd05库仅用于在绑定模式下连接到队列管理器(即,当队列管理器和访问队列的程序位于同一主机上时),而不是MQ客户端安装的一部分。有关更多详细信息,请参阅。通过查看您的代码,我可以看到init()
函数正在指定MQC.TRANSPORT\u MQSERIES\u CLIENT
,尽管我看不到正在调用init()
函数。此外,还应该检查是否在库路径中指定了mqjbnd05,如果是,则删除它
虽然可能与您得到的错误无关,但另一件可能值得检查的事情是通道
MQTX1012.MQTX1013
是服务器连接通道,而不是发送方或接收方通道。对于第一个问题,是的,您可以在UNIX主机上运行队列管理器,该主机可由运行在Windows主机上的客户端访问
对于第二个问题,mqjbnd05库仅用于在绑定模式下连接到队列管理器(即,当队列管理器和访问队列的程序位于同一主机上时),而不是MQ客户端安装的一部分。有关更多详细信息,请参阅。通过查看您的代码,我可以看到init()
函数正在指定MQC.TRANSPORT\u MQSERIES\u CLIENT
,尽管我看不到正在调用init()
函数。此外,还应该检查是否在库路径中指定了mqjbnd05,如果是,则删除它
虽然可能与您得到的错误无关,但另一件事可能是b