1.首先,先来了解下什么是MQ吧,IBM MQ原理和使用场景
2.下载MQ,官网下载地址,我这里使用的是7.5版本。
3.安装详细步骤参考:https://blog.csdn.net/chqlee1990/article/details/27526859
以下的代码环境就是参考了上面这个链接的教程,初次配置MQ队列最好完全和教程一致吧。
值得注意的是,新建服务器连接通道而不是服务器通道:
4.好了,环境配置好了,导入MQ安装目录下的依赖包。
接下来是生产者的代码:
package com.mq.producer;
import java.io.IOException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ibm.mq.MQC;
import com.ibm.mq.MQEnvironment;
import com.ibm.mq.MQException;
import com.ibm.mq.MQMessage;
import com.ibm.mq.MQPutMessageOptions;
import com.ibm.mq.MQQueue;
import com.ibm.mq.MQQueueManager;
/**
* @author admin
* 生产者
*/
@SuppressWarnings("deprecation")
public class MessagesProducer {
public static MQQueueManager QMGR; // 队列管理器
public static MQQueue QUEUE; // 队列
static {
try {
MQEnvironment.hostname = "10.53.200.147";
MQEnvironment.port = 8927; // TCP/IP port
MQEnvironment.channel = "CNN_JACK";
MQEnvironment.CCSID = 1381;
MQEnvironment.userID = "MUSR_MQADMIN"; // 用户名对应的密码
MQEnvironment.password = "123456";
QMGR = new MQQueueManager("QM_JACK");
QUEUE = QMGR.accessQueue("QUEUE_RECV",
MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_INQUIRE | MQC.MQOO_OUTPUT);
} catch (MQException e) {
e.printStackTrace();
}
}
public static void seandMSG(String json) {
MQMessage msg = new MQMessage();// 要写入队列的消息
msg.format = MQC.MQFMT_STRING;
msg.characterSet = 1381;
msg.encoding = 1381;
try {
// msg.writeObject(json);// 将消息写入消息对象中
// msg.writeString(json);
// msg.writeUTF(json);
msg.write(json.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
MQPutMessageOptions pmo = new MQPutMessageOptions();
msg.expiry = -1; // 设置消息用不过期
try {
QUEUE.put(msg, pmo); // 将消息放入队列
} catch (MQException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:config/spring.xml");
while (true) {
// System.out.println("初始化成功!");
}
}
}
5.消费者:
package com.mq.consumer;
import com.alibaba.fastjson.JSON;
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.MQQueue;
import com.ibm.mq.MQQueueManager;
import com.sunrun.mq.bean.Messages;
import com.sunrun.mq.service.BaseInsertService;
/**
* @author admin
* 消费者
*/
public class MessageMQ {
public static MQQueueManager QMGR; // 队列管理器
public static MQQueue QUEUE; // 队列
static{
try {
MQEnvironment.hostname = "10.53.200.147";
MQEnvironment.port = 8927; // TCP/IP port
MQEnvironment.channel = "CNN_JACK";
MQEnvironment.CCSID = 1381;
MQEnvironment.userID = "MUSR_MQADMIN"; // 用户名对应的密码
MQEnvironment.password = "123456";
QMGR = new MQQueueManager("QM_JACK");
QUEUE = QMGR.accessQueue("QUEUE_RECV", MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_INQUIRE | MQC.MQOO_OUTPUT);
} catch (MQException e) {
e.printStackTrace();
}
}
public static void receiveMsg() {
int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT | MQC.MQOO_INQUIRE;
MQQueue queue = null;
try {
queue = QMGR.accessQueue("QUEUE_RECV", openOptions, null, null, null);
BaseInsertService in = new BaseInsertService();
while(true){
int depth = queue.getCurrentDepth(); // 将队列的里的消息读出来
if(depth!=0){
System.out.println("该队列当前的深度为:" + depth);
System.out.println("===========================");
while (depth-- > 0) {
MQMessage msg = new MQMessage();// 要读的队列的消息
MQGetMessageOptions gmo = new MQGetMessageOptions();
queue.get(msg, gmo);
// System.out.println("消息的大小为:" + msg.getDataLength());
byte[] rawData = new byte[msg.getMessageLength()];
msg.readFully(rawData);
String mm = new String(rawData);
// System.out.println("消息的内容:" + mm);
Messages message = JSON.parseObject(mm, Messages.class);
// TODO 更新到Mysql
in.insertMysql(message);
System.out.println("---------------------------");
}
}
}
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {
if (queue != null) {
try { queue.close(); }
catch (MQException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
receiveMsg();
}
}
注:
1.代码中MQEnvironment.userID、MQEnvironment.password,测试环境可以不用。
2.遇到问题:MQJE2035:队列管理器拒绝连接尝试。
打开cmd,输入:runmqsc QM_JACK
然后输入:alter qmgr chlauth(disabled)
3.生产者write数据的时候要和消费者一致,不然消息读不出来的,就像上面demo那样写吧。
4.遇到MQJE001: Completion Code 2, Reason 2085。检查一下MQ连接配置的MQ队列名是否写错了。
附:1.常用命令:IBM MQ常用的命令
2.MQ错误码:(具体参考官网:IBM MQ 官网错误码)
package MQSeries::Constants;
%ReasonText =
(
0 => "No reason to report.",
2001 => "Alias base queue not a valid type.",
2002 => "Application already connected.",
2003 => "Unit of work encountered fatal error or backed out.",
2004 => "Buffer parameter not valid.",
2005 => "Buffer length parameter not valid.",
2006 => "Length of character attributes not valid.",
2007 => "Character attributes string not valid.",
2008 => "Not enough space allowed for character attributes.",
2009 => "Connection to queue manager lost.",
2010 => "Data length parameter not valid.",
2011 => "Name of dynamic queue not valid.",
2012 => "Call not valid in environment.",
2013 => "Expiry time not valid.",
2014 => "Feedback code not valid.",
2016 => "Gets inhibited for the queue.",
2017 => "No more handles available.",
2018 => "Connection handle not valid.",
2019 => "Object handle not valid.",
2020 => "Value for inhibit-get or inhibit-put queue attribute not valid.",
2021 => "Count of integer attributes not valid.",
2022 => "Not enough space allowed for integer attributes.",
2023 => "Integer attributes array not valid.",
2024 => "No more messages can be handled within current unit of work.",
2025 => "Maximum number of connections reached.",
2026 => "Message descriptor not valid.",
2027 => "Missing reply-to queue.",
2029 => "Message type in message descriptor not valid.",
2030 => "Message length greater than maximum for queue.",
2031 => "Message length greater than maximum for queue manager.",
2033 => "No message available.",
2034 => "Browse cursor not positioned on message.",
2035 => "Not authorized for access.",
2036 => "Queue not open for browse.",
2037 => "Queue not open for input.",
2038 => "Queue not open for inquire.",
2039 => "Queue not open for output.",
2040 => "Queue not open for set.",
2041 => "Object definition changed since opened.",
2042 => "Object already open with conflicting options.",
2043 => "Object type not valid.",
2044 => "Object descriptor structure not valid.",
2045 => "Option not valid for object type.",
2046 => "Options not valid or not consistent.",
2047 => "Persistence not valid.",
2048 => "Message on a temporary dynamic queue cannot be persistent.",
2049 => "Message Priority exceeds maximum value supported.",
2050 => "Message priority not valid.",
======================2======================
2051 => "Put calls inhibited for the queue.",
2052 => "Queue has been deleted.",
2053 => "Queue already contains maximum number of messages.",
2055 => "Queue contains one or more messages or uncommitted put or get requests.",
2056 => "No space available on disk for queue.",
2057 => "Queue type not valid.",
2058 => "Queue manager name not valid or not known.",
2059 => "Queue manager not available for connection.",
2061 => "Report options in message descriptor not valid.",
2062 => "A message is already marked.",
2063 => "Security error occurred.",
2065 => "Count of selectors not valid.",
2066 => "Count of selectors too big.",
2067 => "Attribute selector not valid.",
2068 => "Selector not applicable to queue type.",
2069 => "Signal outstanding for this handle.",
2070 => "No message returned (but signal request accepted).",
2071 => "Insufficient storage available.",
2072 => "Syncpoint support not available.",
2075 => "Value for trigger-control attribute not valid.",
2076 => "Value for trigger-depth attribute not valid.",
2077 => "Value for trigger-message-priority attribute not valid.",
2078 => "Value for trigger-type attribute not valid.",
2079 => "Truncated message returned (processing completed).",
2080 => "Truncated message returned (processing not completed).",
2082 => "Unknown alias base queue.",
2085 => "Unknown object name.",
2086 => "Unknown object queue manager.",
2087 => "Unknown remote queue manager.",
2090 => "Wait interval in MQGMO not valid.",
2091 => "Transmission queue not local.",
2092 => "Transmission queue with wrong usage.",
2093 => "Queue not open for pass all context.",
2094 => "Queue not open for pass identity context.",
2095 => "Queue not open for set all context.",
2096 => "Queue not open for set identity context.",
2097 => "Queue handle referred to does not save context.",
2098 => "Context not available for queue handle referred to.",
2099 => "Signal field not valid.",
2100 => "Object already exists.",
======================2======================
2101 => "Object damaged.",
2102 => "Insufficient system resources available.",
2103 => "Another queue manager already connected.",
2104 => "Report option(s) in message descriptor not recognized.",
2105 => "Storage class error.",
2106 => "COD report option not valid for XCF queue.",
2107 => "MQXWAIT call canceled.",
2108 => "Invocation of MQXWAIT call not valid.",
2109 => "Call suppressed by exit program.",
2110 => "Message format not valid.",
2111 => "Source coded character set identifier not valid.",
2112 => "Source integer encoding not recognized.",
2113 => "Packed-decimal encoding in message not recognized.",
2114 => "Floating-point encoding in message not recognized.",
2115 => "Target coded character set identifier not valid.",
2116 => "Target integer encoding not recognized.",
2117 => "Packed-decimal encoding specified by receiver not recognized.",
2118 => "Floating-point encoding specified by receiver not recognized.",
2119 => "Application message data not converted.",
2120 => "Converted data too big for buffer.",
2121 => "No participating resource managers registered.",
2122 => "Participating resource manager not available.",
2123 => "Result of commit or back-out operation is mixed.",
2124 => "Result of commit operation is pending.",
2125 => "Bridge started.",
2126 => "Bridge stopped.",
2127 => "Insufficient storage for adapter.",
2128 => "Unit of work already started.",
2129 => "Unable to load adapter connection module.",
2130 => "Unable to load adapter service module.",
2131 => "Adapter subsystem definition module not valid.",
2132 => "Unable to load adapter subsystem definition module.",
2133 => "Unable to load data conversion services modules.",
2134 => "Begin-options structure not valid.",
2135 => "Distribution header structure not valid.",
2136 => "Multiple reason codes returned.",
2137 => "Object not opened successfully.",
2138 => "Unable to load adapter disconnection module.",
2139 => "Connect-options structure not valid.",
2140 => "Wait request rejected by CICS.",
2141 => "Dead letter header structure not valid.",
2142 => "MQ header structure not valid.",
2143 => "Source length parameter not valid.",
2144 => "Target length parameter not valid.",
2145 => "Source buffer parameter not valid.",
2146 => "Target buffer parameter not valid.",
2148 => "IMS information header structure not valid.",
2149 => "PCF structures not valid.",
2150 => "DBCS string not valid.",
======================2======================
2152 => "Object name not valid.",
2153 => "Object queue-manager name not valid.",
2154 => "Number of records present not valid.",
2155 => "Object records not valid.",
2156 => "Response records not valid.",
2157 => "Primary and home ASIDs differ.",
2158 => "Put message record flags not valid.",
2159 => "Put message records not valid.",
2160 => "Connection identifier already in use.",
2161 => "Queue manager quiescing.",
2162 => "Queue manager shutting down.",
2163 => "Recovery coordinator already exists.",
2173 => "Put-message options structure not valid.",
2183 => "Unable to load API crossing exit.",
2184 => "Remote queue name not valid.",
2185 => "Inconsistent persistence specification.",
2186 => "Get-message options structure not valid.",
2187 => "Requested function not supported by CICS bridge.",
2188 => "Call rejected by cluster-workload exit.",
2189 => "Cluster name resolution failed.",
2190 => "Converted string too big for field.",
2191 => "Character trigger message structure not valid.",
2192 => "Page set data set full.",
2193 => "Error accessing page set data set.",
2194 => "Object name not valid for object type.",
2195 => "Unexpected error occurred.",
2196 => "Unknown transmission queue.",
2197 => "Unknown default transmission queue.",
2198 => "Default transmission queue not local.",
2199 => "Default transmission queue usage error.",
=====================2=======================
2201 => "Name in use.",
2202 => "Connection quiescing.",
2203 => "Connection shutting down.",
2204 => "Adapter not available.",
2206 => "Message-identifier error.",
2207 => "Correlation-identifier error.",
2208 => "File-system error.",
2209 => "No message locked.",
2217 => "Not authorized for connection.",
2218 => "Message length greater than maximum for channel.",
2219 => "MQI call reentered before previous call complete.",
2220 => "Reference message header structure not valid.",
2222 => "Queue manager created.",
2223 => "Queue manager unavailable.",
2224 => "Queue depth high limit reached or exceeded.",
2225 => "Queue depth low limit reached or exceeded.",
2226 => "Queue service interval high.",
2227 => "Queue service interval ok.",
2232 => "Unit of work not started.",
2233 => "Automatic channel definition succeeded.",
2234 => "Automatic channel definition failed.",
2235 => "PCF header structure not valid.",
2236 => "PCF integer list parameter structure not valid.",
2237 => "PCF integer parameter structure not valid.",
2238 => "PCF string list parameter structure not valid.",
2239 => "PCF string parameter structure not valid.",
2241 => "Message group not complete.",
2242 => "Logical message not complete.",
2243 => "Message segments have differing CCSIDs.",
2244 => "Message segments have differing encodings.",
2245 => "Inconsistent unit-of-work specification.",
2246 => "Message under cursor not valid for retrieval.",
2247 => "Match options not valid.",
2248 => "Message descriptor extension not valid.",
2249 => "Message flags not valid.",
2250 => "Message sequence number not valid.",
=======================2=====================
2251 => "Message segment offset not valid.",
2252 => "Original length not valid.",
2253 => "Length of data in message segment is zero.",
2255 => "Unit of work not available for the queue manager to use.",
2256 => "Wrong version of MQGMO supplied.",
2257 => "Wrong version of MQMD supplied.",
2258 => "Group identifier not valid.",
2259 => "Inconsistent browse specification.",
2260 => "Transmission queue header structure not valid.",
2261 => "Source environment data error.",
2262 => "Source name data error.",
2263 => "Destination environment data error.",
2264 => "Destination name data error.",
2265 => "Trigger message structure not valid.",
2266 => "Cluster workload exit failed.",
2267 => "Unable to load cluster workload exit.",
2268 => "Put calls inhibited for all queues in cluster.",
2270 => "No destination queues available.",
2273 => "Error processing MQCONN call.",
2274 => "Option not valid in environment.",
2277 => "Channel definition not valid.",
2278 => "Client connection fields not valid.",
2279 => "Channel stopped by user.",
2280 => "Configuration handle not valid.",
2281 => "Function identifier not valid for service.",
2282 => "Channel started.",
2283 => "Channel stopped.",
2284 => "Channel conversion error.",
2285 => "Underlying service not available.",
2286 => "Initialization failed for an undefined reason.",
2287 => "Termination failed for an undefined reason.",
2288 => "Queue name not found.",
2289 => "Unexpected error occurred accessing service.",
2290 => "Queue object already exists.",
2291 => "Unable to determine the user ID.",
2292 => "Entity unknown to service.",
2293 => "Authorization entity unknown to service.",
2294 => "Reference object unknown.",
2295 => "Channel activated.",
2296 => "Channel cannot be activated.",
2297 => "Unit of work canceled.",
2299 => "Selector has wrong data type.",
2300 => "Command type not valid.",
=======================2=====================
2301 => "Multiple instances of system data item not valid.",
2302 => "System data item is read-only and cannot be altered.",
2303 => "Data could not be converted into a bag.",
2304 => "Selector not within valid range for call.",
2305 => "Selector occurs more than once in bag.",
2306 => "Index not present.",
2307 => "String parameter not valid.",
2308 => "Encoding not supported.",
2309 => "Selector not present in bag.",
2310 => "OutSelector parameter not valid.",
2311 => "String truncated (too long for output buffer).",
2312 => "Selector implies a data type not valid for call.",
2313 => "Data type of item differs from previous occurrence of selector.",
2314 => "Index not valid.",
2315 => "System bag is read-only and cannot be altered.",
2316 => "ItemCount parameter not valid.",
2317 => "Format not supported.",
2318 => "System selector not supported.",
2319 => "ItemValue parameter not valid.",
2320 => "Bag handle not valid.",
2321 => "Parameter missing.",
2322 => "Command server not available.",
2323 => "StringLength parameter not valid.",
2324 => "Command code is not a recognized inquiry command.",
2325 => "Input bag contains one or more nested bags.",
2326 => "Bag has wrong type for intended use.",
2327 => "ItemType parameter not valid.",
2328 => "System bag is read-only and cannot be deleted.",
2329 => "System data item is read-only and cannot be deleted.",
2330 => "Coded character set identifier parameter not valid.",
2331 => "Use of message token not valid.",
2332 => "Message data does not begin with MQWIH.",
2333 => "MQWIH structure not valid.",
2334 => "MQRFH structure not valid.",
2335 => "NameValueString field not valid.",
2336 => "Command not valid.",
2337 => "Parameter not valid.",
2338 => "Duplicate parameter.",
2339 => "Parameter missing.",
2367 => "Create Object",
2368 => "Change Object",
2369 => "Delete Object",
2370 => "Refresh Object",
=====================3=======================
3001 => "Type not valid.",
3002 => "Structure length not valid.",
3003 => "Structure version number is not valid.",
3004 => "Message sequence number not valid.",
3005 => "Control option not valid.",
3006 => "Parameter count not valid.",
3007 => "Command identifier not valid.",
3008 => "Command failed.",
3009 => "Structure length not valid.",
3010 => "Structure length not valid.",
3011 => "String length not valid.",
3012 => "Force value not valid.",
3013 => "Structure type not valid.",
3014 => "Parameter identifier is not valid.",
3015 => "Parameter identifier is not valid.",
3016 => "Message length not valid.",
3017 => "Duplicate parameter.",
3018 => "Duplicate parameter.",
3019 => "Parameter count too small.",
3020 => "Parameter count too big.",
3021 => "Queue already exists in cell.",
3022 => "Queue type not valid.",
3023 => "Format not valid.",
3025 => "Replace value not valid.",
3026 => "Duplicate parameter.",
3027 => "Count of parameter values not valid.",
3028 => "Structure length not valid.",
3029 => "Mode value not valid.",
3029 => "Quiesce value not valid.",
3030 => "Message sequence number not valid.",
3031 => "Data count not valid.",
3032 => "Ping Channel command failed.",
3034 => "Channel type not valid.",
3035 => "Parameter sequence not valid.",
3036 => "Transmission protocol type not valid.",
3037 => "Batch size not valid.",
3038 => "Disconnection interval not valid.",
3039 => "Short retry count not valid.",
3040 => "Short timer value not valid.",
3041 => "Long retry count not valid.",
3042 => "Long timer not valid.",
3043 => "Sequence wrap number not valid.",
3044 => "Maximum message length not valid.",
3045 => "Put authority value not valid.",
3046 => "Purge value not valid.",
3047 => "Parameter identifier is not valid.",
3048 => "Message truncated.",
3049 => "Coded character-set identifier error.",
3050 => "Encoding error.",
3052 => "Data conversion value not valid.",
3053 => "In-doubt value not valid.",
3054 => "Escape type not valid.",
3062 => "Channel table value not valid.",
3063 => "Message channel agent type not valid.",
3064 => "Channel instance type not valid.",
3065 => "Channel status not found.",
3066 => "Duplicate parameter.",
3067 => "Total string length error.",
3068 => "Name count value not valid.",
3069 => "String length not valid.",
3086 => "Queue manager coded character set identifier error.",
3088 => "ClusterName and ClusterNamelist attributes conflict.",
3089 => "RepositoryName and RepositoryNamelist attributes conflict.",
3090 => "Cluster queue cannot be a transmission queue.",
3092 => "Library for requested communications protocol could not be loaded.",
3093 => "NetBIOS listener name not defined.",
3095 => "Conflicting parameters.",
3150 => "Content based filter expression not valid.",
3151 => "Wrong user.",
=====================4=======================
4001 => "Object already exists.",
4002 => "Object has wrong type.",
4003 => "New and existing objects have different type.",
4004 => "Object is open.",
4005 => "Attribute value not valid.",
4006 => "Queue manager not known.",
4007 => "Action not valid for the queue of specified type.",
4008 => "Object name not valid.",
4009 => "Allocation failed.",
4010 => "Remote system not available.",
4011 => "Configuration error.",
4012 => "Connection refused.",
4013 => "Invalid connection name.",
4014 => "Send failed.",
4015 => "Received data error.",
4016 => "Receive failed.",
4017 => "Connection closed.",
4018 => "Not enough storage available.",
4019 => "Communications manager not available.",
4020 => "Listener not started.",
4024 => "Bind failed.",
4025 => "Channel in-doubt.",
4026 => "MQCONN call failed.",
4027 => "MQOPEN call failed.",
4028 => "MQGET call failed.",
4029 => "MQPUT call failed.",
4030 => "Ping error.",
4031 => "Channel in use.",
4032 => "Channel not found.",
4033 => "Remote channel not known.",
4034 => "Remote queue manager not available.",
4035 => "Remote queue manager terminating.",
4036 => "MQINQ call failed.",
4037 => "Queue is not a transmission queue.",
4038 => "Channel disabled.",
4039 => "User exit not available.",
4040 => "Commit failed.",
4041 => "Parameter not allowed for this channel type.",
4042 => "Channel already exists.",
4043 => "Data too large.",
4044 => "Channel name error.",
4045 => "Transmission queue name error.",
4047 => "Message channel agent name error.",
4048 => "Channel send exit name error.",
4049 => "Channel security exit name error.",
4050 => "Channel message exit name error.",
4051 => "Channel receive exit name error.",
4052 => "Transmission queue name not allowed for this channel type.",
4053 => "Message channel agent name not allowed for this channel type.",
4054 => "Disconnection interval not allowed for this channel type.",
4055 => "Short retry parameter not allowed for this channel type.",
4056 => "Short timer parameter not allowed for this channel type.",
4057 => "Long retry parameter not allowed for this channel type.",
4058 => "Long timer parameter not allowed for this channel type.",
4059 => "Put authority parameter not allowed for this channel type.",
4060 => "Keepalive interval not valid.",
4061 => "Connection name parameter required but missing.",
4062 => "Error in connection name parameter.",
4063 => "MQSET call failed.",
4064 => "Channel not active.",
4065 => "Channel terminated by security exit.",
4067 => "Dynamic queue scope error.",
4068 => "Cell directory is not available.",
4069 => "Message retry count not valid.",
4070 => "Message-retry count parameter not allowed for this channel type.",
4071 => "Channel message-retry exit name error.",
4072 => "Message-retry exit parameter not allowed for this channel type.",
4073 => "Message retry interval not valid.",
4074 => "Message-retry interval parameter not allowed for this channel type.",
4075 => "Nonpersistent message speed not valid.",
4076 => "Nonpersistent message speed parameter not allowed for this channel type.",
4077 => "Heartbeat interval not valid.",
4078 => "Heartbeat interval parameter not allowed for this channel type.",
4079 => "Channel automatic definition error.",
4080 => "Channel automatic definition parameter not allowed for this channel type.",
4081 => "Channel automatic definition event error.",
4082 => "Channel automatic definition event parameter not allowed for this channel type.",
4083 => "Channel automatic definition exit name error.",
4084 => "Channel automatic definition exit parameter not allowed for this channel type.",
4085 => "Action suppressed by exit program.",
4086 => "Batch interval not valid.",
4087 => "Batch interval parameter not allowed for this channel type.",
4088 => "Network priority value is not valid.",
4089 => "Network priority parameter not allowed for this channel type.",
=======================6=====================
6117 => "Length is negative.",
900 => "Lowest value for an application-defined reason code returned by a data-conversion exit.",
999 => "Highest value for application-defined reason code returned by a data-conversion exit.",
3091 => "Action value not valid.",
);