WebSphere MQ에서 구성된 요청 큐를 수신하기 위해 C#에서 Windows 기반 서비스를 작성해야합니다. MQ에 요청을 넣고 상관 ID를 얻었지만 이에 대한 응답으로 실제 결과가 표시되지 않습니다.C#의 WebSphere MQ Listener
새 메시지가 큐에 도착할 때마다 서비스가 메시지를 받아서 요청을 처리해야하는 시스템을 개발하고 싶습니다. 내 상관 ID로 해당 응답을 매핑 할 수 있습니다.
WebSphere MQ에서 구성된 요청 큐를 수신하기 위해 C#에서 Windows 기반 서비스를 작성해야합니다. MQ에 요청을 넣고 상관 ID를 얻었지만 이에 대한 응답으로 실제 결과가 표시되지 않습니다.C#의 WebSphere MQ Listener
새 메시지가 큐에 도착할 때마다 서비스가 메시지를 받아서 요청을 처리해야하는 시스템을 개발하고 싶습니다. 내 상관 ID로 해당 응답을 매핑 할 수 있습니다.
다음 코드는 내 문제를 해결했습니다.
class Program
{
static void Main(string[] args)
{
Program app = new Program();
app.Setup();
Console.ReadLine();
}
public void Setup()
{
XMSFactoryFactory xff = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ);
IConnectionFactory cf = xff.CreateConnectionFactory();
cf.SetStringProperty(XMSC.WMQ_HOST_NAME, "10.87.188.156(7111)");
cf.SetIntProperty(XMSC.WMQ_PORT, 7111);
cf.SetStringProperty(XMSC.WMQ_CHANNEL, "QMEIGS1.CRM.SVRCONN");
cf.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT);
cf.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, "QMEIGS1");
cf.SetIntProperty(XMSC.WMQ_BROKER_VERSION, XMSC.WMQ_BROKER_V1);
IConnection conn = cf.CreateConnection();
Console.WriteLine("connection created");
ISession sess = conn.CreateSession(false, AcknowledgeMode.AutoAcknowledge);
IDestination dest = sess.CreateQueue("DOX.APYMT.ESB.SSK.RPO.02");
IMessageConsumer consumer = sess.CreateConsumer(dest);
MessageListener ml = new MessageListener(OnMessage);
consumer.MessageListener = ml;
conn.Start();
Console.WriteLine("Consumer started");
}
private void OnMessage(IMessage msg)
{
ITextMessage textMsg = (ITextMessage)msg;
Console.Write("Got a message: ");
Console.WriteLine(textMsg.Text);
}
}
공식 예제는 http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_8.0.0/com.ibm.mq.msc.doc/xms_cuselisnr_net.htm – cryss
에서 볼 수 있습니다. IBM의,하지만 여전히 의심의 여지가 매우 유용한 링크 덕분에 많이 –
저는 Z/OS 메인 프레임의 MQ에 연결 중입니다. Rashmi에서 코드 예제 나를 위해 속임수를 썼는지,하지만 난 메시지를 추출하기 위해 다음과 같이 "의 onMessage"방법을 변경하는 데 필요한 :
private void OnMessage(IMessage msg)
{
IBytesMessage bytesMessage = (IBytesMessage)msg;
var buffer = new byte[bytesMessage.BodyLength];
bytesMessage.ReadBytes(buffer, (int)bytesMessage.BodyLength);
var messageAsText = Encoding.Unicode.GetString(buffer);
Console.Write("Got a message: ");
Console.WriteLine(messageAsText);
}
"is"키워드를 사용하여 클래스 유형을 테스트하고 그에 따라 캐스트 할 수 있습니다. 예를 들어, "if (msg is IBytesMessage) byMsg = (IBytesMessage) msg;" – Shashi
당신이 당신을 위해 작동하지 않는 몇 가지 예제 코드를 게시 할 수 있습니까? 당신은 이미 무엇을 시도 했습니까? –
마이크 감사합니다,하지만 일이 잘 실행 실제로 MQ에 비동기 호출을 호출 오전 모든 오류가 발생하지 않지만 시간이 응답하지 및 일부 시간 처리 점점 시간이 지 않습니다, 코드를 찾고 있어요 어떤 큐가 상관 ID로 요청을 처리 할 때마다 응답을 얻을 수 있습니다. 코드가 필요한지 알려주십시오. –
여기에 도움이되는 것이 있습니까? 'C : \ Program Files (x86) \ IBM \ WebSphere MQ \ tools \ dotnet \ samples \ cs' –