精华内容
下载资源
问答
  • JAVA 调用MQ
    2021-02-26 10:32:54

    前提:MQ服务器端创建

    队列管理器:QueueManager

    队列:XML.IN

    服务器连接通道:SYSTEM.ADMIN.SVRCONN

    监听器监听1414端口。

    package mq;

    import com.ibm.mq.MQC;

    import com.ibm.mq.MQEnvironment;

    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;

    /**

    * 测试调用MQ

    *

    * @author Administrator

    *

    */

    public class TestMQ {

    /**

    * 队列管理器

    */

    private static final String MQ_QUEUE_MANAGER = "QueueManager";

    /**

    * 队列

    */

    private static final String MQ_QUEUE = "XML.IN";

    /**

    * 通道

    */

    private static final String MQ_CHANNEL = "SYSTEM.ADMIN.SVRCONN";

    /**

    * IP

    */

    private static final String MQ_HOST = "localhost";

    /**

    * 端口

    */

    private static final int MQ_PORT = 1414;

    private MQQueueManager qMgr;

    /**

    * 测试

    * @param args

    */

    public static void main(String[] args) {

    TestMQ test = new TestMQ();

    test.getConnMQManager();

    test.sendMessage("1111111");

    test.receiveMsg();

    }

    /**

    * 发送消息到MQ

    * @param message

    */

    public void sendMessage(String message) {

    MQQueue mqQueue = null;

    try {

    // 建立连接

    int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT| MQC.MQOO_INQUIRE;

    mqQueue = qMgr.accessQueue(MQ_QUEUE, openOptions, null, null, null);

    MQMessage msg = new MQMessage();

    msg.format = MQC.MQFMT_STRING;

    msg.characterSet = 1381;

    msg.writeObject(message);

    MQPutMessageOptions pmo = new MQPutMessageOptions();

    // 设置消息用不过期

    msg.expiry = -1;

    // 将消息放入队列

    mqQueue.put(msg, pmo);

    } catch (Exception e) {

    // TODO: handle exception

    e.printStackTrace();

    } finally{

    if(mqQueue!=null){

    try {

    mqQueue.close();

    } catch (Exception e2) {

    // TODO: handle exception

    e2.printStackTrace();

    }

    }

    }

    }

    /**

    * 读取MQ消息

    */

    public void receiveMsg(){

    MQQueue mqQueue = null;

    try {

    // 建立连接

    int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT| MQC.MQOO_INQUIRE;

    mqQueue = qMgr.accessQueue(MQ_QUEUE, openOptions, null, null, null);

    // 队列深度

    int depth = mqQueue.getCurrentDepth();

    System.out.println("当前队列深度为:"+depth);

    while (depth-->0){

    // 要读取的消息

    MQMessage msg = new MQMessage();

    MQGetMessageOptions mqGet = new MQGetMessageOptions();

    mqQueue.get(msg, mqGet);

    System.out.println("消息的大小为:"+msg.getDataLength());

    System.out.println("消息的内容为:"+msg.readObject());

    }

    } catch (Exception e) {

    // TODO: handle exception

    e.printStackTrace();

    } finally{

    if(mqQueue!=null){

    try {

    mqQueue.close();

    } catch (Exception e2) {

    // TODO: handle exception

    e2.printStackTrace();

    }

    }

    }

    }

    /**

    * 获取连接

    */

    public void getConnMQManager() {

    MQEnvironment.hostname = MQ_HOST;

    MQEnvironment.channel = MQ_CHANNEL;

    MQEnvironment.CCSID = 1381; // 字符编码

    MQEnvironment.port = MQ_PORT;

    try {

    qMgr = new MQQueueManager(MQ_QUEUE_MANAGER);

    } catch (Exception e) {

    // TODO: handle exception

    e.printStackTrace();

    }

    }

    /**

    * 关闭连接

    */

    public void closeConnMQManager() {

    if (qMgr != null) {

    try {

    qMgr.close();

    } catch (Exception e) {

    // TODO: handle exception

    e.printStackTrace();

    }

    }

    }

    }对于报以下错误的可参考http://www-01.ibm.com/support/docview.wss?uid=swg21636532 MQJE001:发生 MQException:完成码 2,原因 2035 MQJE036:队列管理器拒绝连接尝试 MQJE001:完成码 2,原因 2035 com.ibm.mq.MQException: MQJE001:完成码 2,原因 2035

    更多相关内容
  • mq使用入门案例demo

    2018-05-27 17:16:44
    这是一个mq的入门使用案例包括一对一队列,和订阅者队列(一对多),这是一个maven项目,需要大家导入的时候导入maven项目
  • Java调用MQ队列

    2021-02-12 19:09:42
    IBM MQ 6.0中设置两个队列,(远程队列、通道之类都不设置)。队列管理器是XIR_QM_1502队列名称是ESBREQIP地址是10.23.117.134(远程的一台电脑,跟我的电脑不在一个局域网内)端口1414CCSID 1208程序如下,发送线程两个...

    IBM MQ 6.0中设置两个队列,(远程队列、通道之类都不设置)。

    队列管理器是XIR_QM_1502

    队列名称是ESBREQ

    IP地址是10.23.117.134(远程的一台电脑,跟我的电脑不在一个局域网内)

    端口1414

    CCSID 1208

    程序如下,发送线程两个,接收线程一个。接收完毕后就结束。

    /*

    * 创建日期 2012-7-10

    *

    * TODO 要更改此生成的文件的模板,请转至

    * 窗口 - 首选项 - Java - 代码样式 - 代码模板

    */

    package yerasel;

    /**

    * @author Fenglb E-mail:56553655@163.com

    * @version 创建时间:2009-4-30 下午04:13:38 类说明

    */

    import java.io.IOException;

    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;

    interface SomeConstants {

    String qManager = "XIR_QM_1502";//"XIR_QM"; //QueueManager name

    String qName = "ESBREQ";// Queue Name

    String strIP = "10.23.117.134";//"10.24.28.139";//"10.24.28.102";

    int iPort = 1502;//1414;

    String strChl = "SYSTEM.DEF.SVRCONN";// Server-Connection Channel

    int iCCSID = 1208;

    }

    class Sender implements Runnable, SomeConstants {

    public void run() {

    sendMessage();

    }

    public void sendMessage() {

    String name = Thread.currentThread().getName();

    System.out.println("进入线程" + name);

    MQQueueManager qMgr = null;

    // configure connection parameters

    MQEnvironment.hostname = strIP;

    // Server name or IP

    MQEnvironment.port = iPort;

    MQEnvironment.channel = strChl;

    MQEnvironment.CCSID = iCCSID;

    // java程序连接mq的方式有两种,一是客户机方式,一是绑定方式,

    // 默认是客户机方式,当mq部署在本地的时候,就需要用绑定方式

    // 本机IP是10.24.28.139连接10.23.117.134的时候不需要下句

    //MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,

    //MQC.TRANSPORT_MQSERIES_BINDINGS);

    // Create a connection to the QueueManager

    System.out.println(name + " Connecting to queue manager: " + qManager);

    try {

    qMgr = new MQQueueManager(qManager);

    // Set up the options on the queue we wish to open

    int openOptions = MQC.MQMT_REQUEST | MQC.MQPMO_NEW_MSG_ID

    | MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING

    | MQC.MQOO_INPUT_AS_Q_DEF;

    // Now specify the queue that we wish to open and the open options

    System.out.println(name + " Accessing queue: " + qName);

    MQQueue queue = qMgr.accessQueue(qName, openOptions);

    // Define a simple WebSphere MQ Message ...

    // Specify the default put message options

    MQPutMessageOptions pmo = new MQPutMessageOptions();

    // Put the message to the queue

    System.out.println(name + " Sending a message...");

    MQMessage msg = new MQMessage();

    msg.messageId = "MSGID".getBytes();

    msg.messageType = MQC.MQMT_REQUEST;

    msg.replyToQueueName = "ESBREQ";

    // 在此测试一下 mq 的传输次列

    for (int j = 1; j 

    msg.messageSequenceNumber = j;

    // write some text in UTF8 format

    try {

    String str = "Salemetsizbe Yerasel";

    str = str + " " + j;

    msg.writeUTF(str);

    queue.put(msg, pmo);

    msg.clearMessage();

    System.out.println(name + " putting the message... " + j);

    } catch (MQException mqe) {

    mqe.printStackTrace();

    break;

    } catch (IOException e1) {

    e1.printStackTrace();

    }

    }

    qMgr.commit();

    System.out.println(name + " Done!");

    System.out.println("==========");

    System.out.println("");

    } catch (MQException e) {

    e.printStackTrace();

    }

    }

    }

    class Receiver implements Runnable, SomeConstants {

    public void run() {

    recvMessage();

    }

    public void recvMessage() {

    String name = Thread.currentThread().getName();

    try {

    Thread.sleep(1000);

    MQQueueManager qMgr = null;

    System.out.println("进入线程" + name);

    System.out.println(name + " Connecting to queue manager: "

    + qManager);

    qMgr = new MQQueueManager(qManager);

    // 设置将要连接的队列属性

    // Note. The MQC interface defines all the constants used by the

    // WebSphere MQ Java programming interface

    // (except for completion code constants and error code constants).

    // MQOO_INPUT_AS_Q_DEF:Open the queue to get messages using the

    // queue-defined default.

    // MQOO_OUTPUT:Open the queue to put messages.

    int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT

    | MQC.MQOO_INQUIRE;

    // Now get the message back again. First define a WebSphere MQ

    // message to receive the data

    MQMessage rcvMessage = new MQMessage();

    // Specify default get message options

    MQGetMessageOptions gmo = new MQGetMessageOptions();

    gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT;// Get messages

    // under sync point

    // control(在同步点控制下获取消息)

    gmo.options = gmo.options + MQC.MQGMO_WAIT; // Wait if no messages

    // on the

    // Queue(如果在队列上没有消息则等待)

    gmo.options = gmo.options + MQC.MQGMO_FAIL_IF_QUIESCING;// Fail if

    // Qeue

    // Manager

    // Quiescing(如果队列管理器停顿则失败)

    gmo.waitInterval = 1000; // Sets the time limit for the

    // wait.(设置等待的毫秒时间限制)

    System.out.println(name + " Accessing queue: " + qName);

    MQQueue queue = qMgr.accessQueue(qName, openOptions);

    int depth = 0;

    // Get the message off the queue.

    System.out.println("... " + name + " getting the message back again");

    for (;;) {

    try {

    queue.get(rcvMessage, gmo);

    System.out.println(" ID: "

    + (new String(rcvMessage.messageId)).trim()

    + " Num: " + rcvMessage.messageSequenceNumber

    + " Type: " + rcvMessage.messageType + " Flag: "

    + rcvMessage.messageFlags);

    // And display the message text...

    String msgText = rcvMessage.readUTF();

    System.out.println("The message is: " + msgText);

    rcvMessage.clearMessage();

    // Break if no MSG left in queue

    depth = queue.getCurrentDepth();

    if (depth == 0)

    break;

    } catch (MQException mqe) {

    mqe.printStackTrace();

    break;

    // null;

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    // Close the queue

    System.out.println(name + " Closing the queue");

    queue.close();

    // Disconnect from the QueueManager

    System.out.println(name + " Disconnecting from the Queue Manager");

    qMgr.disconnect();

    System.out.println(name + " Done!");

    System.out.println("==========");

    System.out.println("");

    } catch (MQException ex) {

    System.out

    .println("A WebSphere MQ Error occured : Completion Code "

    + ex.completionCode + " Reason Code "

    + ex.reasonCode + ex.getMessage());

    } catch (InterruptedException e1) {

    e1.printStackTrace();

    }

    }

    }

    public class MQTest {

    public static void main(String args[]) {

    /*

    * MQTest first = new MQTest(); first.sendMessage();

    * first.recvMessage();

    */

    Sender sender = new Sender();

    Thread senderThread = new Thread(sender);

    senderThread.start();

    senderThread.setName("Sender");

    Thread senderThread2 = new Thread(sender);

    senderThread2.start();

    senderThread2.setName("Sender2");

    Receiver recv = new Receiver();

    Thread recvThread = new Thread(recv);

    recvThread.start();

    recvThread.setName("Receiver");

    // Receiver recv = new Receiver();

    // new Thread(recv).start();

    }

    }

    运行结果如下:

    进入线程Sender2

    进入线程Sender

    Sender2 Connecting to queue manager: XIR_QM_1502

    Sender Connecting to queue manager: XIR_QM_1502

    Sender2 Accessing queue: ESBREQ

    Sender2 Sending a message...

    Sender Accessing queue: ESBREQ

    Sender Sending a message...

    Sender2 putting the message... 1

    Sender putting the message... 1

    Sender2 putting the message... 2

    Sender putting the message... 2

    Sender2 putting the message... 3

    Sender putting the message... 3

    Sender2 putting the message... 4

    Sender putting the message... 4

    Sender2 Done!

    ==========

    Sender Done!

    ==========

    进入线程Receiver

    Receiver Connecting to queue manager: XIR_QM_1502

    Receiver Accessing queue: ESBREQ

    ... Receiver getting the message back again

    ID: MSGID Num: 1 Type: 1 Flag: 0

    The message is: Salemetsizbe Yerasel 1

    ID: MSGID Num: 1 Type: 1 Flag: 0

    The message is: Salemetsizbe Yerasel 1

    ID: MSGID Num: 1 Type: 1 Flag: 0

    The message is: Salemetsizbe Yerasel 2

    ID: MSGID Num: 1 Type: 1 Flag: 0

    The message is: Salemetsizbe Yerasel 2

    ID: MSGID Num: 1 Type: 1 Flag: 0

    The message is: Salemetsizbe Yerasel 3

    ID: MSGID Num: 1 Type: 1 Flag: 0

    The message is: Salemetsizbe Yerasel 3

    ID: MSGID Num: 1 Type: 1 Flag: 0

    The message is: Salemetsizbe Yerasel 4

    ID: MSGID Num: 1 Type: 1 Flag: 0

    The message is: Salemetsizbe Yerasel 4

    Receiver Closing the queue

    Receiver Disconnecting from the Queue Manager

    Receiver Done!

    ==========

    展开全文
  • java mq 使用

    2020-09-24 15:57:44
    1、mq地址配置 2、pom.xml mq配置 <activemq-pool.version>5.15.0</activemq-pool.version> <!-- activemq --> <dependency> <groupId>org.apache.activemq</groupId> ...

    1、mq地址配置

    2、pom.xml mq配置

    <activemq-pool.version>5.15.0</activemq-pool.version>

    <!-- activemq -->
            <dependency>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-pool</artifactId>
                <version>${activemq-pool.version}</version>
            </dependency>

    3、底层调取mq

    package unistctest;

    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.ActiveMQConnectionFactory;
    import org.jeecgframework.core.util.PropertiesUtil;
    import org.jeecgframework.web.system.pojo.base.TSUser;

    import com.thoughtworks.xstream.XStream;
    import com.unistc.mq.SendMQ;
    import com.unistc.mq.exchangeentity.ExchangeMessage;
    import com.unistc.mq.exchangeentity.ExchangeObjectUser;

    public class MSProduct {
        public static int send(String queueName,String data) {
            PropertiesUtil util = new PropertiesUtil("mqinformation.properties");
            String mqAddress = util.readProperty("mqaddress");
            String mqUsername = util.readProperty("username");
            String mqUserPassword = util.readProperty("userpassword");
            // 连接工厂
                    ConnectionFactory factory;
                    // 连接实例
                    Connection connection = null;
                    // 收发的线程实例
                    Session session;
                    // 消息发送目标地址
                    Destination destination;
                    // 消息创建者
                    MessageProducer messageProducer;
                    try {
    //                    factory = new ActiveMQConnectionFactory("admin", "admin", "tcp://10.10.10.45:61616");
                        factory = new ActiveMQConnectionFactory(mqUsername, mqUserPassword, mqAddress);
                        // 获取连接实例
                        connection = factory.createConnection();
                        // 启动连接
                        connection.start();
                        // 创建接收或发送的线程实例(创建session的时候定义是否要启用事务,且事务类型是Auto_ACKNOWLEDGE也就是消费者成功在Listern中获得消息返回时,会话自动确定用户收到消息)
                        session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
                        // 创建队列(返回一个消息目的地)
                        destination = session.createQueue(queueName);
                        // 创建消息生产者
                        messageProducer = session.createProducer(destination);
                        // 创建TextMessage消息实体
                        TextMessage message = session.createTextMessage(data);
    //                    System.out.println("message==="+message.getText());
                        messageProducer.send(message);
                        session.commit();
                    } catch (JMSException e) {
                        e.printStackTrace();
                    } finally {
                        if (connection != null) {
                            try {
                                connection.close();
                            } catch (JMSException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                    return 1;
        }
        
        
        
        public static void main(String[] args) {
            for(int i =0;i<1;i++) {
                TSUser changeUser = new TSUser();
                changeUser.setUserName("user.getUserName()"+i);
                changeUser.setRealName("user.getRealName()"+i);
                changeUser.setId("user.getId()"+i);
                changeUser.setMobilePhone("user.getMobilePhone()"+i);
                changeUser.setEmail("user.getEmail()"+i);
    //            changeUser.setState("0"+i);
                XStream xStream = new XStream();
                //设置别名, 默认会输出全路径
                xStream.alias("ChangeUser", ExchangeObjectUser.class);
                
                try {
        
                        ExchangeMessage exchangeMessage = SendMQ.assembleExchangeMessage("associationRole", changeUser);
                        SendMQ.send("sbsminbanQueue", exchangeMessage);
                        System.out.println("这个消息发送给sbscmisQueue,用户是"+changeUser.getUserName());
                    
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
     

    4、调取封装

    package com.unistc.mq;

    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;

    import org.jeecgframework.web.system.pojo.base.TSUser;

    import com.thoughtworks.xstream.XStream;
    import com.unistc.mq.exchangeentity.ExchangeHeader;
    import com.unistc.mq.exchangeentity.ExchangeMessage;
    import com.unistc.mq.exchangeentity.ExchangeObject;
    import com.unistc.mq.exchangeentity.ExchangeObjectUser;

    import unistctest.MSProduct;

    public class SendMQ {
        public static ExchangeMessage assembleExchangeMessage(String actionType,TSUser tsUser) {
            
            ExchangeObjectUser changeUser = new ExchangeObjectUser();
            changeUser.setUserName(tsUser.getUserName());
            changeUser.setRealName(tsUser.getRealName());
            changeUser.setId(tsUser.getId());
            changeUser.setMobilePhone(tsUser.getMobilePhone());
            changeUser.setEmail(tsUser.getEmail());
            changeUser.setUserKey(tsUser.getPassword());
            
            Calendar calendar = Calendar.getInstance();
    //        calendar.add(Calendar.HOUR, 8);
            ExchangeMessage exchangeMessage = new ExchangeMessage();
            ExchangeHeader exchangeHeader = new ExchangeHeader();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            exchangeHeader.setOperationDate(sdf.format(new Date()));
           
            
            ExchangeObject exchangeObject = new ExchangeObject();
            exchangeObject.setExchangeObjectUser(changeUser);
            exchangeObject.setActionType(actionType);
            exchangeObject.setObjectName("user");
            
            exchangeMessage.setVersion("1.0");
            exchangeMessage.setExchangeHeader(exchangeHeader);
            exchangeMessage.setExchangeObject(exchangeObject);
            return exchangeMessage;
        }
        
        
        public static int send(String queueName ,String data) throws Exception {

            /** 
             * 1 直接发送 2 订阅发送 
             */
            return MSProduct.send(queueName, data);
        }
        public static int send(String queueName ,ExchangeMessage exchangeMessage) throws Exception {

            /** 
             * 1 直接发送 2 订阅发送 
             */
            XStream xStream = new XStream();
            xStream.autodetectAnnotations(true); 
            System.out.println(xStream.toXML(exchangeMessage));
            return MSProduct.send(queueName, xStream.toXML(exchangeMessage));
    //        return 1;
        }
    }
     

    5、调取方法

    private void cleanUpPassAndSend(TSUser user, TSRole tsRole, String actionType) {
            try {
                if (tsRole.getRoleCode().equals(ExchangeConstants.SBS_JBXXGL_ROLENAME)) {
                    ExchangeMessage exchangeMessage = SendMQ.assembleExchangeMessage(actionType, user);
                    SendMQ.send("sbsjbxxglQueue", exchangeMessage);
    //                        System.out.println("这个消息发送给sbsminbanxiaoQueue,用户是"+user.getUserName());
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

     

    展开全文
  • JAVA连接IBM MQ代码

    2019-01-25 11:34:27
    JAVA连接IBM MQ,具体的详细说明,请再csdn上面搜索JAVA连接IBM MQ关键词
  • java代码利用本地的mq配置,发送消息。从A队列管理至B队列管理器。
  • JAVA实现MQ发送接收消息详解 MQ配置文档 MQ配置
  • 采用MQ API方式通信需引入com.ibm.mq.jar包;客户机模式代码:/*** @modified by actorai E-...采用client(客户机模式)方式(另一种是绑定服务器方式)* 此方法类似于MQ Client连接 MQ Server,需要进行相应的服务器连...

    采用MQ API方式通信需引入com.ibm.mq.jar包;客户机模式代码:

    /**

    * @modified by actorai E-mail:actorai@163.com

    * @version 创建时间:2010-9-15

    * 通过MQ API方式连接MQ;采用client(客户机模式)方式(另一种是绑定服务器方式)

    * 此方法类似于MQ Client连接 MQ Server,需要进行相应的服务器连接通道配置

    * 类说明

    */

    package com.mqapi;

    import java.io.IOException;

    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 MessageByMQ{

    //定义队列管理器和队列的名称

    private static String qmName;

    private static String qName;

    private static MQQueueManager qMgr;

    static{

    //设置环境:

    //MQEnvironment中包含控制MQQueueManager对象中的环境的构成的静态变量,MQEnvironment的值的设定会在MQQueueManager的构造函数加载的时候起作用,

    //因此必须在建立MQQueueManager对象之前设定MQEnvironment中的值.

    MQEnvironment.hostname="10.0.4.213";          //MQ服务器的IP地址

    MQEnvironment.channel="CLIENT.QM_APPLE";              //服务器连接的通道

    MQEnvironment.CCSID=1381;                      //服务器MQ服务使用的编码1381代表GBK、1208代表UTF(Coded Character Set Identifier:CCSID)

    MQEnvironment.port=1415;                       //MQ端口

    qmName = "QM_APPLE";                          //MQ的队列管理器名称

    qName = "01";                               //MQ远程队列的名称

    try {

    //定义并初始化队列管理器对象并连接

    //MQQueueManager可以被多线程共享,但是从MQ获取信息的时候是同步的,任何时候只有一个线程可以和MQ通信。

    qMgr = new MQQueueManager(qmName);

    } catch (MQException e) {

    // TODO Auto-generated catch block

    System.out.println("初使化MQ出错");

    e.printStackTrace();

    }

    }

    /**

    * 往MQ发送消息

    * @param message

    * @return

    */

    public static int sendMessage(String message){

    int result=0;

    try{

    //设置将要连接的队列属性

    // Note. The MQC interface defines all the constants used by the WebSphere MQ Java programming interface

    //(except for completion code constants and error code constants).

    //MQOO_INPUT_AS_Q_DEF:Open the queue to get messages using the queue-defined default.

    //MQOO_OUTPUT:Open the queue to put messages.

    /*目标为远程队列,所有这里不可以用MQOO_INPUT_AS_Q_DEF属性*/

    //int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;

    /*以下选项可适合远程队列与本地队列*/

    int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING;

    //连接队列

    //MQQueue provides inquire, set, put and get operations for WebSphere MQ queues.

    //The inquire and set capabilities are inherited from MQManagedObject.

    /*关闭了就重新打开*/

    if(qMgr==null || !qMgr.isConnected()){

    qMgr = new MQQueueManager(qmName);

    }

    MQQueue queue = qMgr.accessQueue(qName, openOptions);

    //定义一个简单的消息

    MQMessage putMessage = new MQMessage();

    //将数据放入消息缓冲区

    putMessage.writeUTF(message);

    //设置写入消息的属性(默认属性)

    MQPutMessageOptions pmo = new MQPutMessageOptions();

    //将消息写入队列

    queue.put(putMessage,pmo);

    queue.close();

    }catch (MQException ex) {

    System.out.println("A WebSphere MQ error occurred : Completion code "

    + ex.completionCode + " Reason code " + ex.reasonCode);

    ex.printStackTrace();

    }catch (IOException ex) {

    System.out.println("An error occurred whilst writing to the message buffer: " + ex);

    }catch(Exception ex){

    ex.printStackTrace();

    }finally{

    try {

    qMgr.disconnect();

    } catch (MQException e) {

    e.printStackTrace();

    }

    }

    return result;

    }

    /**

    * 从队列中去获取消息,如果队列中没有消息,就会发生异常,不过没有关系,有TRY...CATCH,如果是第三方程序调用方法,如果无返回则说明无消息

    * 第三方可以将该方法放于一个无限循环的while(true){...}之中,不需要设置等待,因为在该方法内部在没有消息的时候会自动等待。

    * @return

    */

    public static String getMessage(){

    String message=null;

    try{

    //设置将要连接的队列属性

    // Note. The MQC interface defines all the constants used by the WebSphere MQ Java programming interface

    //(except for completion code constants and error code constants).

    //MQOO_INPUT_AS_Q_DEF:Open the queue to get messages using the queue-defined default.

    //MQOO_OUTPUT:Open the queue to put messages.

    int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;

    MQMessage retrieve = new MQMessage();

    //设置取出消息的属性(默认属性)

    //Set the put message options.(设置放置消息选项)

    MQGetMessageOptions gmo = new MQGetMessageOptions();

    gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT;//Get messages under sync point control(在同步点控制下获取消息)

    gmo.options = gmo.options + MQC.MQGMO_WAIT;  // Wait if no messages on the Queue(如果在队列上没有消息则等待)

    gmo.options = gmo.options + MQC.MQGMO_FAIL_IF_QUIESCING;// Fail if Qeue Manager Quiescing(如果队列管理器停顿则失败)

    gmo.waitInterval = 1000 ;  // Sets the time limit for the wait.(设置等待的毫秒时间限制)

    /*关闭了就重新打开*/

    if(qMgr==null || !qMgr.isConnected()){

    qMgr = new MQQueueManager(qmName);

    }

    MQQueue queue = qMgr.accessQueue(qName, openOptions);

    // 从队列中取出消息

    queue.get(retrieve, gmo);

    //message = retrieve.readUTF(); //此方法读通过MQ资源管理器放入的消息会IO读写错误,通过MQ资源管理器放入的测试消息就不是UTF这样的格式的,所以会报错

    message = retrieve.readLine();  //此方法读xml格式,有网友提到可能会报错

    System.out.println("The message is: " + message);

    queue.close();

    }catch (MQException ex) {

    System.out.println("A WebSphere MQ error occurred : Completion code "

    + ex.completionCode + " Reason code " + ex.reasonCode);

    }catch (IOException ex) {

    //System.out.println("An error occurred whilst writing to the message buffer: " + ex);

    ex.printStackTrace();

    }catch(Exception ex){

    ex.printStackTrace();

    }finally{

    try {

    qMgr.disconnect();

    } catch (MQException e) {

    e.printStackTrace();

    }

    }

    return message;

    }

    public static void main(String args[]) {

    /*下面两个方法可同时使用,也可以单独使用*/

    sendMessage("this is a test by MQ API Client model");

    //getMessage();

    }

    }

    展开全文
  • 使用JAVA代码发送MQ消息

    千次阅读 2017-04-16 12:04:12
    这一节介绍使用JAVA发送文本内容至MQ中 首先新建一个项目,导入必要的包,我记得,必要的包有6个,后来用了maven,我就把本地的删了,测试的时候,可以把jar全部丢进去,在MQ安装目录有个JAVA——lib文件夹,里面...
  • 本篇文章主要介绍了java远程连接调用Rabbitmq的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 描述了java程序代码去访问MQ的SSL加密的通道。如何配置JKS,如何配置MQ服务器的SSL秘钥库,如何配置证书制作证书和秘钥库。主要是如何编写java代码去访问SSL通道并取到数据。
  • 使用JAVA语言自己动手来写一个MQ (类似ActiveMQ,RabbitMQ) 主要角色首先我们必须需要搞明白MQ (消息队列)中的三个基本角色ProducerBrokerConsumer整体架构如下所示 自定义协议首先从上一篇中介绍了协议的相关信息,...
  • java使用mq)消息队列

    千次阅读 2020-12-15 17:16:56
    在调取的中间使用mq,当发起调取时,发送消息进去mq,mq获取返回多个系统和模块的响应,时间减少很多。 3.削峰 在系统使用高峰期时,每秒并发请求5k+,系统直接访问mysql,最多每秒处理2k,高峰期会造成系统崩溃。在...
  • MQ JAVA HTTP SDK Alyun MQ 文档: : 阿里云MQ控制台: ://ons.console.aliyun.com 用 添加Maven依赖 <groupId>com.aliyun.mq</groupId> <artifactId>mq-http-sdk</artifactId> <version>1.0.3 或与依赖项 ...
  • IBM MQ经常被一些政府公共部门,银行等企业用来做数据传输和报文收发,在互联网应用的开发中较少见到,资源为MQjava 代码
  • activeMQ是学习java消息队列的实现项目,使用jfinal +jfinal-ext + activeMQ + quartz快速构建。1.消息队列消息队列,其实是一种基于数据结构实现的服务。而java语言中的实现,有apache的activeMQ,比较主流。2.环境...
  • MQ队列管理器,队列,通道的配置和使用,包含编写Java程序来实现消息的发送。
  • java调用ibmmq最全版本jar包,包含connectorjava调用ibmmq最全版本jar包,包含connectorjava调用ibmmq最全版本jar包,包含connector
  • 三种JavaMQ发送消息的方法(含代码)

    千次阅读 2021-02-27 22:19:34
    创建一个MQQueueManager,进而使用它去创建一个MQQueue,接受使用MQQueue的put方法向MQ实际目标队列中放入消息,实验的结果是表明只支持MQMassege这种类型的消息。途径二:通过JMS方法实现。首先创建一个...
  • JAVA IBM MQ 接收、发送

    热门讨论 2012-05-13 16:43:46
    JAVA IBM MQ 接收消息、发送消息例子
  • JAVA连接IBM MQ

    2021-03-09 23:37:16
    1、配置MQ统一说明:队列管理器名字为“MyTest”使用的端口为“1414”本地队列名称为“LOCALQUEUE”服务器连接通道名称为 “SERVERCONN”1.1、创建队列管理器进入IBM MQ Explorer 创建队列管理器右键“队列管理器”...
  • MQ是消息中间件,是一种在分布式系统中应用程序借以传递消息的媒介,常用的有ActiveMQ,RabbitMQ,kafka。ActiveMQ是Apache下的开源项目,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现。?特点:?1、支持多种语言...
  • 请教 java调用MQ jms通讯取消息慢问题用java语言开发的系统用到MQ,以前测试都正常今天客户返回有时候交易返回3秒以上有点慢,大多数情况下正常,然后本人测试发现每发一笔交易然后停顿2秒后在发第二笔交易,发多笔...
  • JAVA发送接收MQ代码示例

    万次阅读 2017-04-16 13:06:11
    上几篇关于MQ的博客里,并没有介绍的透彻,今天我把用到的类整理到里一起,集成了监视、查找、发送、接收、保存报文的功能。首先,新建TemoteTest类申明: private static MQQueueManager qMgr; // 队列管理器名称 ...
  • Java获取MQ连接数的Demo.zip此为Java调用mq的demo,不多说看代码。。很简单
  • mq安装目录下有简单的发送和接收代码,具体在samp目录下有一些不同语言的源代码,可以借鉴。类介绍:SendMSG:消息发送类。Main():主方法。SendMSG():消息发送方法。方法描述:public SendMSG() {MQEnvironment....
  • java mq 配置方式

    千次阅读 2018-11-17 11:47:10
    最近用到mq,需要配置一些参数,开始时xml配置方式的,用的jar包是spring-rabbit 1.4.5.RELEASE,配置文件如下: &lt;bean id="pushHandler" class="具体实现类路径/com.test"/&gt; &...
  • Java使用websphere websphere mq:用于传输信息 具有跨平台的功能。1 安装websphere mq并启动2 websphere mq建立queue Manager(如:MQSI_SAMPLE_QM)3 建立queue类型选择Local类型的(如lq)4 建立channels类型选择...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 78,114
精华内容 31,245
关键字:

java调用mq

java 订阅