Java连接.Net测试(三)

来源:互联网 发布:大秦帝国之纵横知乎 编辑:程序博客网 时间:2024/04/25 09:02

本节说明Java通过IBM WebSphere MQ连接.Net(调用dll)实现方法及主要代码,如下:

 

1. 下载安装IBM WebSphere MQ(本例使用的是v7.0三个月试用版)。

 

2. 打开WebSphere MQ资源管理器,新建队列管理器(如名为MQSI_SAMPLE_QM),侦听端口号:1415,其

它默认;在刚建的队列管理器MQSI_SAMPLE_QM下新建本地队列(如名为LQ),其它默认;在队列管理器

MQSI_SAMPLE_QM下的“高级”-“通道”中新建服务器连接通道(如名为TestChannel),其它默认(如果

要传输大数据,需修改通道的最大消息长度,修改步骤:在IBM WebSphere MQ资源管理器左侧窗口部分依

次点击“队列管理器”-通道所在的队列管理器名MQSI_SAMPLE_QM-高级-通道,在右侧显示的通道列表中

双击要修改的通道所在行以打开通道属性对话框,在“扩展”中修改最大消息长度)。

 

3. 新建C#应用程序,将WebSphere MQ安装目录下的bin/amqmdnet.dll添加引用到项目中。

C#关键代码如下:
注意:MQ需引用包 IBM.WMQ;

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.IO;
using IBM.WMQ;
namespace TestWebSphere
{
    public class TestMqClass
    {
        public void sendMessageByMQ()
        {
            string qManager = "MQSI_SAMPLE_QM"; //队列管理器名
            string qName = "LQ";//队列名
            MQEnvironment.Hostname = "127.0.0.1";   //所在IP
            MQEnvironment.Channel = "TestChannel";  //通道名
            MQEnvironment.Port = 1415; //侦听端口号

            try
            {
                MQQueueManager qm = new MQQueueManager(qManager);
                int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING;
                MQQueue testQueue = qm.AccessQueue(qName, openOptions);

                //发送部分
                MQMessage message = new MQMessage();
                //队列管理器自动实现的消息分片
                message.MessageFlags = MQC.MQMF_SEGMENTATION_ALLOWED;
               // message.WriteUTF("这个是从.Net发的消息");
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < 10; i++)
                {
                    sb.Append(i + ",");
                    sb.Append("aa" + i + ",");
                    sb.Append("bb" + i + ",");
                }
                message.Write(System.Text.Encoding.ASCII.GetBytes(sb.ToString()));

                MQPutMessageOptions pmo = new MQPutMessageOptions();
                testQueue.Put(message, pmo);

                testQueue.Close();
                qm.Disconnect();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.StackTrace);
            }
        }
    }
}
main方法中:
            TestMqClass test = new TestMqClass();
            test.sendMessageByMQ();
            System.Console.WriteLine("传输完成");
            //System.Console.Read();

 

4. 新建project,添加WebSphere MQ jar包(位于WebSphere MQ安装目录下java/lib文件夹中,根据不同

需要添加的包也不同);
本例添加的包有:com.ibm.mq.jar、com.ibm.mq.jmqi.jar、com.ibm.mq.commonservices.jar、

com.ibm.mq.header.jar、com.ibm.mq.pcf.jar。

java关键代码如下:

import com.ibm.mq.MQC;
import com.ibm.mq.MQEnvironment;
import com.ibm.mq.MQException;
import com.ibm.mq.MQGetMessageOptions;
import com.ibm.mq.MQMessage;
import com.ibm.mq.MQPutMessageOptions;
import com.ibm.mq.MQQueue;
import com.ibm.mq.MQQueueManager;

public class TestMQ {
 
 public static void main(String[] args) {
  TestMQ test = new TestMQ();
  test.test();
 }

 public void test(){
        String qManager = "MQSI_SAMPLE_QM"; //QueueManager name
        String qName = "LQ";//Queue Name
          try {
                    //configure connection parameters
                    MQEnvironment.hostname="127.0.0.1";//MQ Server name or IP
                    MQEnvironment.port=1415;//listenr port
                    MQEnvironment.channel="TestChannel";//Server-Connection Channel Name
                    MQEnvironment.CCSID =1381; //似乎是Windows下需用1381,记不太清了

                    MQQueueManager qMgr = new MQQueueManager(qManager);
                    int openOptions = MQC.MQOO_INPUT_SHARED | MQC.MQOO_FAIL_IF_QUIESCING;
                    MQQueue queue = qMgr.accessQueue(qName, openOptions);
                   
                    //接收部分
                    MQMessage rcvMessage = new MQMessage();
                    MQGetMessageOptions gmo = new MQGetMessageOptions();
      //分片消息接收时指定
                    gmo.options = MQC.MQGMO_COMPLETE_MSG;
                    queue.get(rcvMessage, gmo);
//                    String msgText = rcvMessage.readUTF();                   
//                    System.out.println("The UTF message is: " + msgText);
                    byte[] b = new byte[rcvMessage.getMessageLength()];
                    rcvMessage.readFully(b);
                    String str = new String(b);
                   
                    List<User> users = new ArrayList<User>();  //user类只有三个属性,从循环

中可以看出有哪些
                    String[] array = str.split(",");
                    for (int i = 0; i < array.length; i+=3) {
               if(array[i].length() > 0){
                User user = new User();
                user.setUserId(Integer.parseInt(array[i]));
                user.setUserName(array[i + 1]);
                user.setPassword(array[i + 2]);
                
                users.add(user);
               }
              }
                    System.out.println(users.size());
                   
                    queue.close();
                    qMgr.disconnect();
                } catch (MQException ex) {
                    ex.printStackTrace();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
          }
}

 

5. 运行C#程序发送消息到通道中;

 

6. 运行java程序接收消息并在控制台输出。