JAVA 连接IBM MQ的topic

本文介绍了如何使用Java连接到IBM MQ的Topic,包括在MQ上定义Topic的步骤以及Java代码示例,展示了发送和接收消息的过程。

1:java 连接ibm mq的topic首先需要在mq上建立topic,命令如下
     DEFINE TOPIC(TOPIC_xx_2) TOPICSTR(NBA/LAKER) DESCR('This is a TOPIC') PUB(ASPARENT) SUB(ENABLED)  WILDCARD(PASSTHRU)
至于队列管理器的创建见日志中的MQ队列管理建立日志
2:java连接程序



import com.ibm.mq.MQEnvironment;
import com.ibm.mq.MQGetMessageOptions;
import com.ibm.mq.MQMessage;
import com.ibm.mq.MQPutMessageOptions;
import com.ibm.mq.MQQueueManager;
import com.ibm.mq.MQTopic;
import com.ibm.mq.pcf.CMQC;

/**
 *
 *@company XX
 *@author: XX
 *@since: 2011-9-13
 *@version:1.0
 */
public class MQTopicTest {
    public static void main(String[] args){
        MQTopicTest temp = new MQTopicTest();
        temp.send();
        temp.receive();
    }
    public void send(){
        try{
            MQEnvironment.hostname = "172.17.102.2";
            MQEnvironment.channel = "CHANNEL_xx_2";
            MQEnvironment.port = 8080;
            MQEnvironment.CCSID = 1381;
            MQEnvironment.properties.put(CMQC.TRANSPORT_PROPERTY,
                    CMQC.TRANSPORT_MQSERIES);
            MQQueueManager queueManager= new MQQueueManager("QM_xx_2");
            MQTopic topic = queueManager.accessTopic("TOPIC_xx_2", "TOPIC_xx_2", CMQC.MQTOPIC_OPEN_AS_PUBLICATION, CMQC.MQOO_OUTPUT);
            MQPutMessageOptions option = new MQPutMessageOptions();
            option.options = CMQC.MQPMO_FAIL_IF_QUIESCING | CMQC.MQPMO_RETAIN;;
            MQMessage msg = new MQMessage();
            msg.expiry = 5*60*1000;
            msg.writeObject("test");
            msg.setStringProperty("test", "1");
            topic.put(msg,option);
            queueManager.commit();
        }catch(Exception e){
            System.out.println(e);
        }
    }
    public void receive(){
        try{
            MQEnvironment.hostname = "172.17.102.2";
            MQEnvironment.channel = "CHANNEL_xx_2";
            MQEnvironment.port = 8080;
            MQEnvironment.CCSID = 1381;
            MQEnvironment.properties.put(CMQC.TRANSPORT_PROPERTY,
                    CMQC.TRANSPORT_MQSERIES);
            MQQueueManager queueManager= new MQQueueManager("QM_xx_2");
            MQTopic topic = queueManager.accessTopic("TOPIC_xx_2", "TOPIC_xx_2", CMQC.MQTOPIC_OPEN_AS_SUBSCRIPTION, CMQC.MQSO_CREATE);
            MQMessage msg = new MQMessage();
            MQGetMessageOptions option = new MQGetMessageOptions();
            topic.get(msg, option);       
            queueManager.commit();
            System.out.println(msg.getStringProperty("test"));
        }catch(Exception e){
            System.out.println(e);
        }
    }
}

### 如何使用 Java 应用程序连接IBM MQ Topic 为了使 Java 应用程序能够与 IBM MQ 的主题 (Topic) 进行交互,需遵循特定配置并编写相应的代码来建立连接。这涉及设置环境、加载必要的库文件以及实现消息发送和接收逻辑。 #### 配置环境 确保已安装 IBM MQ 客户端运行时组件[^1]。此过程通常包括下载适合操作系统的客户端包,并按照官方文档中的说明完成安装。对于开发工作而言,还需将 `com.ibm.mq.allclient.jar` 添加至项目的类路径中以便访问 API 函数。 #### 编写 Java 代码示例 下面是一个简单的例子展示了怎样通过编程方式订阅一个名为 `TEST.TOPIC` 的主题: ```java import com.ibm.msg.client.jms.JmsConnectionFactory; import com.ibm.msg.client.jms.JmsFactoryFactory; import com.ibm.msg.client.wmq.WMQConstants; import javax.jms.*; public class IBMMQTopicExample { private static final String HOST = "localhost"; // 主机名或 IP 地址 private static final int PORT = 1414; // 端口号 private static final String CHANNEL = "SVRCONN_CHANNEL"; private static final String QUEUE_MANAGER = "QMGR_NAME"; private static final String TOPIC_STRING = "/topic/TEST.TOPIC"; public static void main(String[] args) throws JMSException { JmsFactoryFactory ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER); JmsConnectionFactory cf = ff.createConnectionFactory(); // 设置连接工厂属性 cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, HOST); cf.setIntProperty(WMQConstants.WMQ_PORT, PORT); cf.setStringProperty(WMQConstants.WMQ_CHANNEL, CHANNEL); cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT); cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, QUEUE_MANAGER); Connection connection = null; Session session = null; try { connection = cf.createConnection(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Topic topic = session.createTopic(TOPIC_STRING); MessageConsumer consumer = session.createDurableSubscriber(topic, "subscriptionName"); connection.start(); while(true){ TextMessage messageReceived = (TextMessage)consumer.receive(5000); if(messageReceived !=null){ System.out.println("Received: "+messageReceived.getText()); }else{ break; } } } finally { if(session!=null){ session.close(); } if(connection!=null){ connection.close(); } } } } ``` 上述代码片段创建了一个持久化订阅者实例用于监听指定的主题名称下的消息推送事件。每当有新数据到达时即会触发回调函数处理接收到的内容。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值