我有这样的需求,比如用用户ID而不是通道连接MQ。
我尝试在没有chanel的情况下将用户ID和密码设置为MQEnvironment类,但出现以下异常。
com.ibm.mq.jmqi.JmqiException: CC=2;RC=2540;AMQ9520: Channel not defined remotely. [3=].
Run Code Online (Sandbox Code Playgroud)
请指导我,是否可以编写java客户端来使用用户id而不是通道连接MQ。
当使用 JMS 示例代码时,放置在应用程序中,使用 MQ8 + JDk8 时出现低于授权错误
MQException received while attempting reconnect: Reason Code=2035
Exception text: com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2035'.
Run Code Online (Sandbox Code Playgroud)
AMQERR01.LOG 说
AMQ8077: Entity 'clientadmin' has insufficient authority to access object
'TLSTEST.QM'.
EXPLANATION:
The specified entity is not authorized to access the required object. The
following requested permissions are unauthorized: connect
ACTION:
Ensure that the correct level of authority has been set for this entity against
the required object, or ensure that the entity is a member …Run Code Online (Sandbox Code Playgroud) 当我执行下面的代码时,它将从控制台上的 MQ 读取数据,然后从队列中删除所有数据。我不希望在从 MQ 读取数据时从队列中删除我的数据。我想让它参数化,也想将数据写入excel。任何人都可以帮我解决这个问题吗?下面是我正在使用的代码。
public class MQReadJava
{
private MQQueueManager _queueManager = null;
public int port = 1416;
public String hostname = "xyz";
public String channel = "SYSTEM.ABC.123";
public String qManager = "ABC.BAW";
public String inputQName = "MYQUEUE";
public MQReadJava()
{
super();
}
private void init(String[] args) throws IllegalArgumentException
{
// Set up MQ environment
MQEnvironment.hostname = hostname;
MQEnvironment.channel = channel;
MQEnvironment.port = port;
}
public static void main(String[] args)throws IllegalArgumentException
{
MQReadJava readQ = new MQReadJava();
try
{ …Run Code Online (Sandbox Code Playgroud) 目前,我的 Spring Boot application.yaml 中有以下属性。
ibm:
mq:
queueManager: <queue-manager>
channel: <channel>
connName: <host>(<port>)
queue: <queue-name>
user: <user>
password: <password>
Run Code Online (Sandbox Code Playgroud)
我想在没有密码的情况下进行连接,为此我必须设置jmsConnectionFactory.setBooleanProperty(WMQConstants.USER_AUTHENTICATION_MQCSP, false);属性。
无论如何,我可以通过将参数传递给 connName 在 application.yaml 中指定此属性吗?
在哪里可以找到与 IBM MQ 相关的所有预定义的关键 spring-boot 应用程序属性?
我有一个 spring-boot 服务,可以读取和写入同一个 IBM MQ 消息代理。该进程是独立的,不在应用程序容器内运行。我想实现“共享事务资源”模式,这样我就不需要配置任何 JTA/XA 事务管理。我的工作顺利,但是以下边缘情况不会回滚消息发布。读取已回滚,但发布仍已提交。
假设MessageListener 收到一条消息
并且使用相同的 JMS ConnectionFactory 将消息发布到另一个队列
消息发布后onMessage() 抛出异常
然后消息会回滚到 READ 队列,不会发布到 WRITE 队列
我的代码看起来像这样......
@Component
public class MyJmsReceiver implements MessageListener
{
@Autowired MyJmsSender myJmsSender;
@Override
public void onMessage(Message message)
{
myJmsSender.sendMessage("some-payload");
if(true) throw new RuntimeException("BOOM!");
}
}
@Component
public class MyJmsSender
{
@Transactional(propagation = Propagation.MANDATORY)
public void sendMessage(final String payload)
{
jmsTemplate.convertAndSend("QUEUE.OUT", payload);
}
}
@Configuration
@EnableJms
@EnableTransactionManagement
public class Config
{
@Bean
public JmsTemplate jmsTemplate(ConnectionFactory connectionFactory)
{ …Run Code Online (Sandbox Code Playgroud) 根据我目前的理解,所有客户端连接都在两个级别进行身份验证,通道级别和队列管理器级别,
在队列管理器级别,它使用对象CONNAUTH的属性值来确定如何完成身份验证(例如:使用主机操作系统用户存储库),如果对象指定,则它使用结构中包含的用户 ID作为用户应用程序上下文的 id,它用于授权,或者如果存在,则运行客户端应用程序的用户 id 用作应用程序上下文的用户 id,并且该用户 id 用于授权。QMGRAUTHINFOAUTHINFOADOPTCTX(YES)MQCSPADOPTCTX(NO)
在渠道级别,不执行任何与授权相关的操作。仅按照配置进行身份验证。为了更精细的访问控制,一组通道验证记录被应用于通道。CONNAUTH属性的值QMGR仍用于确定要进行身份验证的用户存储库。
问题:
我有MQConsumerClass,它从队列中检索消息,如下所示.
while (running)
{
try
{
MQMessage rcvMessage = new MQMessage();
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = MQConstants.MQGMO_WAIT;
gmo.waitInterval = 60000;
queue.get(rcvMessage, gmo);
if(rcvMessage.getTotalMessageLength() > 0)
{
String msgText = rcvMessage.readUTF();
}
}
catch blocks{}
}
Run Code Online (Sandbox Code Playgroud)
但问题是当队列中没有消息时,会抛出2033异常.
我认为2033 NO_MSG_AVAILABLE异常不是严重的异常,可能会停止操作.
但是,我想onMessage(Message msg)在队列中有新消息时调用函数.
我想用MessageListener创建这个类,但我找不到MessageListener或任何与之相关的示例.
所以,请告诉我WMQ Java API中是否有任何MessageListener函数.
要么
任何方式这样做?
我尝试使用MQ Client将消息发送到MQ Server
错误是: - 发生了WebSphere MQ错误:完成代码2原因代码2058.我知道这个原因代码,因为错误的队列管理器名称..但队列管理器名称是正确的...
安装WebSphere MQ Client之后,我只运行命令:SET MQSERVER = QM_ORANGE/TCP/IPADDRESS(PORT NUMBER)
并运行此程序公共类MQSample {
// code identifier
static final String sccsid = "@(#) MQMBID sn=p750-002-131001_DE su=_FswqMCqGEeOZ3ui-rZDONA pn=MQJavaSamples/wmqjava/MQSample.java";
// define the name of the QueueManager
private static final String qManager = "QM_ORANGE";
// and define the name of the Queue
private static final String qName = "Q1";
/**
* Main entry point
*
* @param args - command line arguments (ignored)
*/
public static void main(String args[]) {
try …Run Code Online (Sandbox Code Playgroud) 我有一个连接到MQ的Java客户端,队列管理器抱怨The maximum number of instances, 50, of channel 'CHAN' was reached。
在哪里以及如何在客户端代码或属性中找到由Java客户端创建的实例数?