メッセージキューイングアクセス機能 TP1/Message Queue - Access 使用の手引

[目次][用語][索引][前へ][次へ]

MQIのサンプルコーディング(C言語)

C言語でのコーディング例を示します。

 
/* All Rights Reserved, Copyright (C) 2003, Hitachi, Ltd. */
/***********************************************************
**  mqcsample.c
**  functions = main()
***********************************************************/
 
/***********************************************************
**  name = main()
**  func = main function of UAP
**      (1)start UAP(output start message)
**      (2)MQCONN(Connect queue manager)
**      (3)MQOPEN(Open queue)
**      (4)MQBEGIN(begin local transaction)
**      (5)MQPUT(Put message)
**      (6)MQBACK(rollback local transaction)
**      (7)MQCMIT(commit local transaction)
**      (8)MQBEGIN(begin local transaction)
**      (9)MQGET(Get message)
**      (10)MQBACK(rollback local transaction)
**      (11)MQCMIT(commit local transaction)
**      (12)MQCLOSE(Close queue)
**      (13)MQDISC(Disconnect queue manager)
**      (14)finish UAP(output end message)
***********************************************************/
#include    <stdio.h>
#include    <string.h>
#include    <cmqc.h>
 
#define PUT_DATA     "******** sample put data ********"
 
int main(void)
{
    MQCHAR48    QueueManager = " ";      /* queue manager name  */
    MQLONG      comp_code,               /* completion code     */
                reason;                  /* reason code         */
    MQHCONN     qm_handle;               /* connection handle   */
    MQCHAR      message_data[200];       /* buffer              */
    MQHOBJ      que_handle;              /* object handle       */
    MQLONG      buffer_length;           /* buffer length       */
    MQLONG      data_length;             /* message length      */
    MQLONG      open_options;            /* open options        */
    MQOD        obj_desc = { MQOD_DEFAULT };
                                         /* object descriptor   */
    MQMD        msg_desc = { MQMD_DEFAULT };
                                         /* message descriptor  */
    MQPMO       put_options = { MQPMO_DEFAULT };
                                         /* put message options */
    MQGMO       get_options = { MQGMO_DEFAULT };
                                         /* get message options */
    MQBO        begin_options = { MQBO_DEFAULT };
                                         /* begin options       */
 
    /* set the queue name */
    strcpy(obj_desc.ObjectName, "dynq1");
 
    /* set the message data */
    strcpy(message_data, PUT_DATA) ;
    buffer_length = strlen(message_data);
 
    printf("MQTRN:Start service. \n");
 
    /* MQCONN( connect to the queue manager ) */
    MQCONN(QueueManager, &qm_handle, &comp_code, &reason);
    if (comp_code != MQCC_OK)
    {
        printf("MQTRN:Failed at MQCONN. CODE = %ld\n", reason);
        goto PROG_END;
    }
 
    /* MQOPEN( open the queue ) */
    open_options = MQOO_OUTPUT | MQOO_INPUT_AS_Q_DEF;
    MQOPEN(qm_handle, &obj_desc, open_options, &que_handle,
            &comp_code, &reason);
    if (comp_code != MQCC_OK)
    {
        printf("MQTRN:Failed at MQOPEN. CODE = %ld\n", reason);
        goto MQ_END;
    }
 
    /* MQBEGIN( begin local transaction ) */
    MQBEGIN(qm_handle, &begin_options, &comp_code, &reason);
    if (comp_code != MQCC_OK)
    {
        printf("MQTRN:Failed at MQBEGIN. CODE = %ld\n",reason);
        goto MQ_END;
    }
 
    /* MQPUT( put the message ) */
    put_options.Options = MQPMO_SYNCPOINT;
    MQPUT(qm_handle, que_handle, &msg_desc, &put_options,
            buffer_length, (PMQBYTE)message_data,&comp_code, &reason);
    if (comp_code != MQCC_OK)
    {
        printf("MQTRN:Failed at MQPUT. CODE = %ld\n", reason);
        /* MQBACK( rollback local transaction ) */
        MQBACK(qm_handle, &comp_code, &reason);
        if (comp_code != MQCC_OK)
        {
            printf("MQTRN:Failed at MQBACK. CODE = %ld\n",reason);
        }
        goto MQ_END;
    }
  
    /* MQCMIT( commit local transaction ) */
    MQCMIT(qm_handle, &comp_code, &reason);
    if (comp_code != MQCC_OK)
    {
        printf("MQTRN:Failed at MQCMIT. CODE = %ld\n", reason);
        goto MQ_END;
    }
 
    /* MQBEGIN( begin local transaction ) */
    MQBEGIN(qm_handle, &begin_options, &comp_code, &reason);
    if (comp_code != MQCC_OK)
    {
        printf("MQTRN:Failed at MQBEGIN. CODE = %ld\n",reason);
        goto MQ_END;
    }
 
    /* MQGET( get the message ) */
    get_options.Options = MQGMO_SYNCPOINT | MQGMO_NO_WAIT;
    MQGET(qm_handle, que_handle, &msg_desc, &get_options, 
            buffer_length, (PMQBYTE)message_data, 
            &data_length, &comp_code, &reason);
    if (comp_code != MQCC_OK)
    {
        printf("MQTRN:Failed at MQGET. CODE = %ld\n", reason);
        /* MQBACK( rollback local transaction ) */
        MQBACK(qm_handle, &comp_code, &reason);
        if (comp_code != MQCC_OK)
        {
            printf("MQTRN:Failed at MQBACK. CODE = %ld\n",reason);
        }
        goto MQ_END;
    }
  
    /* MQCMIT( commit local transaction ) */
    MQCMIT(qm_handle, &comp_code, &reason);
    if (comp_code != MQCC_OK)
    {
        printf("MQTRN:Failed at MQCMIT. CODE = %ld\n", reason);
        goto MQ_END;
    }
 
    /* MQCLOSE( close the queue ) */
    MQCLOSE(qm_handle, &que_handle, MQCO_NONE, &comp_code,
                &reason);
    if (comp_code != MQCC_OK)
    {
        printf("MQTRN:Failed at MQCLOSE. CODE = %ld\n",reason);
    }
 
MQ_END:
    /* MQDISC( disconnect from the queue manager ) */
    MQDISC(&qm_handle, &comp_code, &reason);
    if (comp_code != MQCC_OK)
    {
        printf("MQTRN:Failed at MQDISC. CODE = %ld\n", reason);
    }
 
PROG_END:
    printf("MQTRN:Terminate service. \n");
    return(0);
}