其他的通道类型可能需要执行启动命令来变成活动,这种通道活动以后,有一个真实的通道进程启动起来,服务器连接通道是没有相应的通道进程的.
1.相关jar包:
com.ibm.mq.commonservices.jar
com.ibm.mq.headers.jar
com.ibm.mq.jar
com.ibm.mq.jmqi.jar
connector.jar
junit-4.4.jar
相关jar可以在ibm mq的安装目录下找到:
2.在mq服务器上创建相应的队列管理器,和队列,以及服务器传输通道。附上操作命令:
--启动队列管理器
strmqm QMEMBFE
--启动监听
runmqlsr -m QMEMBFE -p 1414 -t tcp &
--用户交互管理界面程序
runmqsc QMEMBFE
--创建本地队列
DEFINE QLOCAL (Q1)
--创建名称为DC.SVRCONN的服务器连接通道
DEFINE CHANNEL(DC.SVRCONN) CHLTYPE (SVRCONN) REPLACE
--删除通道
DELETE CHANNEL(DC.SVRCONN)
3.使用java编写调用程序:
运行方法:单元测试运行:testMQ
MessageByMQ
[java] view plain copy
import org.junit.After
import org.junit.Before
import org.junit.Test
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
/**
* 列出常用的错误码:如下:
* 2540:通道定义有错误:</p>
* 解决方式如下:</p>
* 1.进入用户交互界面:runmqsc QMEMBFE(QMEMBFE为队列管理器名称)
* 2.创建相应的服务器连接通道:DEFINE CHANNEL(DC.SVRCONN) CHLTYPE (SVRCONN) REPLACE
* 2035:授权相关错误:解决方式如下:
* 进入用户交互界面:(同上):
* ALTER CHANNEL(DC.SVRCONN) CHLTYPE(SVRCONN) MCAUSER('mqm')
* 说明:DC.SVRCONN 服务器连接通道名称 mqm为ibm mq用户名称
*
*
*
*
* @author kefan
*
*/
public class MessageByMQ {
/**
* 队列管理器的名称
*/
private String qManagerName="QMEMBFE"
/**
* 队列管理器
*/
private MQQueueManager qMgr
/**
* 队列名称
*/
private String queueName="Q1"
/**
* 队列
*/
private MQQueue qQueue
/**
* mq服务器所在的主机名称
*/
private String hostname="192.168.233.134"
/**
* 服务器连接通道名称
*/
private String channelName="DC.SVRCONN"
/**
* 监听器监听的端口
*/
private int port=1414
/**
* 传输的编码类型
*/
private int CCSID = 1381
@Before
public void init(){
try {
MQEnvironment.hostname = this.hostname // 安装MQ所在的ip address
MQEnvironment.port = this.port // TCP/IP port
MQEnvironment.channel = this.channelName
MQEnvironment.CCSID = CCSID
qMgr = new MQQueueManager(this.qManagerName)
int qOptioin = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_INQUIRE
| MQC.MQOO_OUTPUT
qQueue = qMgr.accessQueue(queueName, qOptioin)
} catch (MQException e) {
e.printStackTrace()
}
}
/**
* 发送信息
*/
public void SendMsg(byte[] qByte) {
try {
MQMessage qMsg = new MQMessage()
qMsg.write(qByte)
MQPutMessageOptions pmo = new MQPutMessageOptions()
qQueue.put(qMsg, pmo)
System.out.println("The message is sent!")
System.out.println("\tThe message is " + new String(qByte, "GBK"))
} catch (MQException e) {
e.printStackTrace()
System.out
.println("A WebSphere MQ error occurred : Completion code "
+ e.completionCode + " Reason Code is "
+ e.reasonCode)
} catch (java.io.IOException e) {
e.printStackTrace()
System.out
.println("An error occurred whilst to the message buffer "
+ e)
}
}
/**
* 从消息队列取数据
*/
public void GetMsg() {
try {
MQMessage retrievedMessage = new MQMessage()
MQGetMessageOptions gmo = new MQGetMessageOptions()
gmo.options += MQC.MQPMO_SYNCPOINT
qQueue.get(retrievedMessage, gmo)
int length = retrievedMessage.getDataLength()
byte[] msg = new byte[length]
retrievedMessage.readFully(msg)
String sMsg = new String(msg,"GBK")
System.out.println(sMsg)
} catch (RuntimeException e) {
e.printStackTrace()
} catch (MQException e) {
e.printStackTrace()
if (e.reasonCode != 2033) // 没有消息
{
e.printStackTrace()
System.out
.println("A WebSphere MQ error occurred : Completion code "
+ e.completionCode
+ " Reason Code is "
+ e.reasonCode)
}
} catch (java.io.IOException e) {
System.out
.println("An error occurred whilst to the message buffer "
+ e)
}
}
/**
* 单元测试方法
*/
@Test
public void testMQ(){
MessageByMQ mqst = new MessageByMQ()
mqst.init()
try {
mqst.SendMsg("你好,Webshpere MQ 7.5!".getBytes("GBK"))
mqst.GetMsg()
} catch (Exception e) {
e.printStackTrace()
}
}
/**
* 释放资源
*/
@After
public void release(){
try {
qQueue.close()
qMgr.disconnect()
} catch (MQException e) {
System.out
.println("A WebSphere MQ error occurred : Completion code "
+ e.completionCode + " Reason Code is "
+ e.reasonCode)
}
}
}
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)