C # : Read () 메서드를 사용할 때 IBM MQ '잠금 해제'메시지

갈대

내 코드 :

        //Initialize MQMessage
        MQMessage message = new MQMessage();

        //Initialize WebMQConnection
        WebSphereMQConnection mqRequestConnection = new WebSphereMQConnection(initQMName, initQChannel, initQConnection, initQName, string.Empty, string.Empty);
        mqRequestConnection.Open();
        mqRequestConnection.Read(message);


        //Get the contents as a string
        string body = message.ReadString(message.MessageLength);
        return body;

이 코드는 콘솔 애플리케이션의 일부이며 큐를 순차적으로 찾아보고 각 메시지를 읽는 데 예상대로 작동합니다. 플랫 파일에서 문자열 내용을 구문 분석합니다.

그러나 Read () 메서드는 프로그램이 닫힐 때까지 메시지를 잠근 것 같습니다. 모든 메시지를 순차적으로 읽기 위해 루프에서 프로그램을 실행하더라도 프로그램이 완전히 닫힐 때까지 메시지를 '해제'하지 않는 것 같습니다.

Gets and Puts, Dispose, Backout 등을 시도했지만 전체 콘솔 앱의 실행을 중지하는 것 외에는 아무것도 작동하지 않는 것 같습니다.

알았다
//Initialize WebMQConnection
WebSphereMQConnection mqRequestConnection = new WebSphereMQConnection(initQMName, initQChannel, initQConnection, initQName, string.Empty, string.Empty);
mqRequestConnection.Open();
mqRequestConnection.Read(message);

도대체 그게 뭐야? 확실히 IBM MQ 클래스 및 메소드가 아닙니다. 그래서 그것은 집에서 자란 수업입니다.

따라서 Read () 메서드는 실제로 '찾아보기'를 수행합니다. 이름이 잘못된 메서드입니다. Read () 메서드에서 MQGET의 MQGMO_LOCK 옵션을 사용하고 있다고 확신합니다.

WebSphereMQConnection 클래스를 제거하고 순수한 IBM MQ .NET 코드를 작성하지 않는 이유는 무엇입니까?

다음은 메시지 잠금없이 큐를 찾아 보는 MQ CS .NET 샘플 프로그램입니다.

using System;
using IBM.WMQ;

/// <summary> Program Name
/// MQTest62B
///
/// Description
/// This C# class will connect to a remote queue manager
/// and get (browse) a message from a queue using a managed .NET environment.
///
/// Sample Command Line Parameters
/// -h 127.0.0.1 -p 1415 -c TEST.CHL -m MQWT1 -q TEST.Q1
/// </summary>
/// <author>  Roger Lacroix, Capitalware Inc.
/// </author>
namespace MQTest62
{
    public class MQTest62B
    {
        private System.Collections.Hashtable inParms = null;
        private System.String qManager;
        private System.String outputQName;
        private System.String userID = "tester";
        private System.String password = "barney";

        /*
        * The constructor
        */
        public MQTest62B()
            : base()
        {
        }

        /// <summary> Make sure the required parameters are present.</summary>
        /// <returns> true/false
        /// </returns>
        private bool allParamsPresent()
        {
            bool b = inParms.ContainsKey("-h") && inParms.ContainsKey("-p") &&
                     inParms.ContainsKey("-c") && inParms.ContainsKey("-m") &&
                     inParms.ContainsKey("-q");
            if (b)
            {
                try
                {
                    System.Int32.Parse((System.String)inParms["-p"]);
                }
                catch (System.FormatException e)
                {
                    b = false;
                }
            }

            return b;
        }

        /// <summary> Extract the command-line parameters and initialize the MQ variables.</summary>
        /// <param name="args">
        /// </param>
        /// <throws>  IllegalArgumentException </throws>
        private void init(System.String[] args)
        {
            inParms = System.Collections.Hashtable.Synchronized(new System.Collections.Hashtable(14));
            if (args.Length > 0 && (args.Length % 2) == 0)
            {
                for (int i = 0; i < args.Length; i += 2)
                {
                    inParms[args[i]] = args[i + 1];
                }
            }
            else
            {
                throw new System.ArgumentException();
            }

            if (allParamsPresent())
            {
                qManager = ((System.String)inParms["-m"]);
                outputQName = ((System.String)inParms["-q"]);
                // Set up MQ environment
                MQEnvironment.Hostname = ((System.String)inParms["-h"]);
                MQEnvironment.Channel = ((System.String)inParms["-c"]);
                try
                {
                    MQEnvironment.Port = System.Int32.Parse((System.String)inParms["-p"]);
                }
                catch (System.FormatException e)
                {
                    MQEnvironment.Port = 1414;
                }

                if (userID != null)
                    MQEnvironment.UserId = userID;

                if (password != null)
                    MQEnvironment.Password = password;
            }
            else
            {
                throw new System.ArgumentException();
            }
        }

        /// <summary> Connect, open queue, read (browse) a message, close queue and disconnect. </summary>
        ///
        private void testReceive()
        {
            MQQueueManager qMgr = null;
            MQQueue inQ = null;
            int openOptions = MQC.MQOO_BROWSE + MQC.MQOO_FAIL_IF_QUIESCING;

            try
            {
                qMgr = new MQQueueManager(qManager);
                System.Console.Out.WriteLine("MQTest62B successfully connected to " + qManager);

                inQ = qMgr.AccessQueue(outputQName, openOptions, null, null, null); // no alternate user id
                System.Console.Out.WriteLine("MQTest62B successfully opened " + outputQName);

                testLoop(inQ);

            }
            catch (MQException mqex)
            {
                System.Console.Out.WriteLine("MQTest62B cc=" + mqex.CompletionCode + " : rc=" + mqex.ReasonCode);
            }
            catch (System.IO.IOException ioex)
            {
                System.Console.Out.WriteLine("MQTest62B ioex=" + ioex);
            }
            finally
            {
               try
               {
                   if (inQ != null)
                       inQ.Close();
                   System.Console.Out.WriteLine("MQTest62B closed: " + outputQName);
               }
               catch (MQException mqex)
               {
                   System.Console.Out.WriteLine("MQTest62B cc=" + mqex.CompletionCode + " : rc=" + mqex.ReasonCode);
               }

               try
               {
                   if (qMgr != null)
                       qMgr.Disconnect();
                   System.Console.Out.WriteLine("MQTest62B disconnected from " + qManager);
               }
               catch (MQException mqex)
               {
                   System.Console.Out.WriteLine("MQTest62B cc=" + mqex.CompletionCode + " : rc=" + mqex.ReasonCode);
               }
            }
        }

        private void testLoop(MQQueue inQ)
        {
            bool flag = true;
            MQMessage msg = new MQMessage();
            MQGetMessageOptions gmo = new MQGetMessageOptions();
            gmo.Options |= MQC.MQGMO_BROWSE_NEXT | MQC.MQGMO_WAIT | MQC.MQGMO_FAIL_IF_QUIESCING;
            gmo.WaitInterval = 500;  // 1/2 second wait time   or MQC.MQEI_UNLIMITED

            while (flag)
            {
                try
                {
                    msg = new MQMessage();
                    inQ.Get(msg, gmo);
                    System.Console.Out.WriteLine("Message Data: " + msg.ReadString(msg.MessageLength));
                }
                catch (MQException mqex)
                {
                    System.Console.Out.WriteLine("MQTest62B CC=" + mqex.CompletionCode + " : RC=" + mqex.ReasonCode);
                    if (mqex.Reason == MQC.MQRC_NO_MSG_AVAILABLE)
                    {
                        // no meesage - life is good - loop again
                    }
                    else
                    {
                        flag = false;  // severe error - time to exit
                    }
                }
                catch (System.IO.IOException ioex)
                {
                    System.Console.Out.WriteLine("MQTest62B ioex=" + ioex);
                }
            }
        }

        /// <summary> main line</summary>
        /// <param name="args">
        /// </param>
        //        [STAThread]
        public static void Main(System.String[] args)
        {
            MQTest62B write = new MQTest62B();

            try
            {
                write.init(args);
                write.testReceive();
            }
            catch (System.ArgumentException e)
            {
                System.Console.Out.WriteLine("Usage: MQTest62B -h host -p port -c channel -m QueueManagerName -q QueueName");
                System.Environment.Exit(1);
            }
            catch (MQException e)
            {
                System.Console.Out.WriteLine(e);
                System.Environment.Exit(1);
            }

            System.Environment.Exit(0);
        }
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

msbuild는 빌드 시간 동안 잠긴 dll을 잠금 해제 할 수 있으므로 "다른 프로세스에서 사용하고 있기 때문에 파일에 액세스 할 수 없습니다"라는 메시지를 피할 수 있습니까?

분류에서Dev

사용자가 시계를 잠금 해제 할 때 정보 표시 데이터가 최신 상태인가요?

분류에서Dev

AMS 사용 IBM Websphere MQ에서 메시지 검색

분류에서Dev

장치가 잠금 해제 되려고 할 때 어떤 메서드가 호출됩니까?

분류에서Dev

dbus 세션 잠금 / 잠금 해제 메시지 대기

분류에서Dev

내 컴퓨터를 잠금 해제 할 때 두 개의 잠금 화면

분류에서Dev

Spring Kinesis 바인더가 잠금 해제를 시도 할 때 애플리케이션 중지 중 DynamoDB 잠금 해제 오류

분류에서Dev

ASP.NET-Core 앱에 "이 플랫폼에서는 파일 영역 잠금 / 잠금 해제가 지원되지 않습니다."라는 오류 메시지가 표시되는 이유는 무엇입니까? MacOS에 배포 할 때?

분류에서Dev

IBM MQ 사용 용기에 메시지를 넣을 수 없습니다

분류에서Dev

Python 용 비동기 모드에서 잠금 / 잠금 해제 메커니즘 만들기

분류에서Dev

C : pthread를 사용한 스레드 동기화, 뮤텍스 잠금 및 잠금 해제

분류에서Dev

PHP, Redis, 잠금 제품, 가격이 상승 할 때까지 그리고 그 후 잠금 해제

분류에서Dev

스프링 부트 애플리케이션을 사용하여 IBM MQ에서 메시지를 읽으려면 어떻게해야합니까?

분류에서Dev

뮤텍스 잠금이 잠금 해제 될 때까지 액세스를 차단합니까?

분류에서Dev

조건부 변수를 신호 할 때 잠금을 유지해야합니까?

분류에서Dev

"캐시 일관성 메커니즘"때문에 "잠금"opcode 접두사가 사용되지 않습니까?

분류에서Dev

다시 해싱 할 때 해시 맵 잠금

분류에서Dev

메일 함 파일 잠금없이 메시지를 삭제하려면 어떻게해야합니까? Perl의 Mail :: Box를 사용하고 있습니다.

분류에서Dev

USB 지문 판독기를 사용하여 Windows 10 Pro에서 bitlocker를 잠금 해제 할 수 있습니까?

분류에서Dev

ssh-add를 사용해도 SSH-Key가 잠금 해제되지 않음

분류에서Dev

잠금을 해제 할 때 Ubuntu 13.10 및 12.04에서 암호 요청

분류에서Dev

로그인하거나 잠금 해제 할 때마다 ctrl + alt + del이 필요하지 않은 도메인 컴퓨터

분류에서Dev

Widows 7 도메인 연결 PC를 잠금 해제 할 수 없음

분류에서Dev

잠금과 같은 사용 패턴으로 메서드를 생성하려면 어떻게해야합니까?

분류에서Dev

Websphere MQ : com.ibm.mq.jms.MQSession에서 createQueue (java.lang.String queueName) 메소드의 적절한 사용

분류에서Dev

IBM MQ 제한 사항

분류에서Dev

IBM MQ를 사용하여 메시지 보내기, 2059 오류 발생 또는 큐 관리자 구성 중단

분류에서Dev

C #에서 스레딩 할 때 변수 잠금

분류에서Dev

제약 조건이있는 Generic Parameter를 사용할 때 C #은 별도의 메서드를 생성합니까?

Related 관련 기사

  1. 1

    msbuild는 빌드 시간 동안 잠긴 dll을 잠금 해제 할 수 있으므로 "다른 프로세스에서 사용하고 있기 때문에 파일에 액세스 할 수 없습니다"라는 메시지를 피할 수 있습니까?

  2. 2

    사용자가 시계를 잠금 해제 할 때 정보 표시 데이터가 최신 상태인가요?

  3. 3

    AMS 사용 IBM Websphere MQ에서 메시지 검색

  4. 4

    장치가 잠금 해제 되려고 할 때 어떤 메서드가 호출됩니까?

  5. 5

    dbus 세션 잠금 / 잠금 해제 메시지 대기

  6. 6

    내 컴퓨터를 잠금 해제 할 때 두 개의 잠금 화면

  7. 7

    Spring Kinesis 바인더가 잠금 해제를 시도 할 때 애플리케이션 중지 중 DynamoDB 잠금 해제 오류

  8. 8

    ASP.NET-Core 앱에 "이 플랫폼에서는 파일 영역 잠금 / 잠금 해제가 지원되지 않습니다."라는 오류 메시지가 표시되는 이유는 무엇입니까? MacOS에 배포 할 때?

  9. 9

    IBM MQ 사용 용기에 메시지를 넣을 수 없습니다

  10. 10

    Python 용 비동기 모드에서 잠금 / 잠금 해제 메커니즘 만들기

  11. 11

    C : pthread를 사용한 스레드 동기화, 뮤텍스 잠금 및 잠금 해제

  12. 12

    PHP, Redis, 잠금 제품, 가격이 상승 할 때까지 그리고 그 후 잠금 해제

  13. 13

    스프링 부트 애플리케이션을 사용하여 IBM MQ에서 메시지를 읽으려면 어떻게해야합니까?

  14. 14

    뮤텍스 잠금이 잠금 해제 될 때까지 액세스를 차단합니까?

  15. 15

    조건부 변수를 신호 할 때 잠금을 유지해야합니까?

  16. 16

    "캐시 일관성 메커니즘"때문에 "잠금"opcode 접두사가 사용되지 않습니까?

  17. 17

    다시 해싱 할 때 해시 맵 잠금

  18. 18

    메일 함 파일 잠금없이 메시지를 삭제하려면 어떻게해야합니까? Perl의 Mail :: Box를 사용하고 있습니다.

  19. 19

    USB 지문 판독기를 사용하여 Windows 10 Pro에서 bitlocker를 잠금 해제 할 수 있습니까?

  20. 20

    ssh-add를 사용해도 SSH-Key가 잠금 해제되지 않음

  21. 21

    잠금을 해제 할 때 Ubuntu 13.10 및 12.04에서 암호 요청

  22. 22

    로그인하거나 잠금 해제 할 때마다 ctrl + alt + del이 필요하지 않은 도메인 컴퓨터

  23. 23

    Widows 7 도메인 연결 PC를 잠금 해제 할 수 없음

  24. 24

    잠금과 같은 사용 패턴으로 메서드를 생성하려면 어떻게해야합니까?

  25. 25

    Websphere MQ : com.ibm.mq.jms.MQSession에서 createQueue (java.lang.String queueName) 메소드의 적절한 사용

  26. 26

    IBM MQ 제한 사항

  27. 27

    IBM MQ를 사용하여 메시지 보내기, 2059 오류 발생 또는 큐 관리자 구성 중단

  28. 28

    C #에서 스레딩 할 때 변수 잠금

  29. 29

    제약 조건이있는 Generic Parameter를 사용할 때 C #은 별도의 메서드를 생성합니까?

뜨겁다태그

보관