ASG
IBM
Zystems
Cressida
Icon
Netflexity
 
  MQSeries.net
Search  Search       Tech Exchange      Education      Certifications      Library      Info Center      SupportPacs      LinkedIn  Search  Search                                                                   FAQ  FAQ   Usergroups  Usergroups
 
Register  ::  Log in Log in to check your private messages
 
RSS Feed - WebSphere MQ Support RSS Feed - Message Broker Support

MQSeries.net Forum Index » IBM MQ API Support » MQ C/C++ api for linux

Post new topic  Reply to topic
 MQ C/C++ api for linux « View previous topic :: View next topic » 
Author Message
tarangsethia
PostPosted: Thu Oct 30, 2008 8:58 am    Post subject: MQ C/C++ api for linux Reply with quote

Newbie

Joined: 30 Oct 2008
Posts: 3

I have a c/c++ legacy app which connects to the local queue manager using MQCONN and processes messages.

I want to convert this app to connect to remote MQ on a different box. How do I change my code to specify the remote hostname, port and type of connection while not changing the flow of the program.

Currently the code uses the following functions. Please let me know if I can change the MQ options to connect to a remote queue manager and remote queue using the same api.

// Declare MQI structures needed
MQOD od = {MQOD_DEFAULT}; // Object Descriptor
MQMD md = {MQMD_DEFAULT}; // Message Descriptor
MQGMO gmo = {MQGMO_DEFAULT}; // get message options
MQHCONN Hcon; // connection handle
MQHOBJ Hobj; // object handle
MQLONG O_options; // MQOPEN options
MQLONG C_options; // MQCLOSE options
MQLONG CompCode; // completion code
MQLONG OpenCode; // MQOPEN completion code
MQLONG Reason; // reason code
MQLONG CReason; // reason code for MQCONN
MQBYTE buffer[512000]; // message buffer
MQLONG buflen; // buffer length
MQLONG messlen; // message length received
char QMName[50]; // queue manager name

O_options = MQOO_INPUT_AS_Q_DEF // open queue for input
+ MQOO_FAIL_IF_QUIESCING; // but not if MQM stopping

MQCONN(QMName, &Hcon, &CompCode, &CReason);
if (CompCode == MQCC_FAILED)
{
//printf("if MQCC_FAILED\n");
}
MQOPEN(Hcon, &od, O_options, &Hobj, &OpenCode, &Reason);
//printf("after MQOPEN\n");
if (Reason != MQRC_NONE)
{
//printf("if Reason != MQRC_NONE\n");
MQDISC(&Hcon, &CompCode, &Reason);
}
MQGET(Hcon, Hobj, &md, &gmo, buflen, buffer, &messlen, &CompCode,&Reason);
MQCMIT(Hcon, &CompCode, &Reason);
MQBACK(Hcon, &CompCode, &Reason);
Back to top
View user's profile Send private message
bower5932
PostPosted: Thu Oct 30, 2008 9:48 am    Post subject: Reply with quote

Jedi Knight

Joined: 27 Aug 2001
Posts: 3023
Location: Dallas, TX, USA

Take a look at the MQCONNX call. It has an additional parameter that allows you to specify client connect information.
Back to top
View user's profile Send private message Send e-mail Visit poster's website AIM Address Yahoo Messenger
tarangsethia
PostPosted: Thu Oct 30, 2008 10:38 am    Post subject: Reply with quote

Newbie

Joined: 30 Oct 2008
Posts: 3

If I use MQCONNX, will I be able to connect to a queue manager on a different machine specifying the hostname and channel configuration. Can somebody provide an example of that. If yes can I use the existing MQGET etc api.
Back to top
View user's profile Send private message
Vitor
PostPosted: Thu Oct 30, 2008 11:04 am    Post subject: Reply with quote

Grand High Poobah

Joined: 11 Nov 2005
Posts: 26093
Location: Texas, USA

tarangsethia wrote:
If I use MQCONNX, will I be able to connect to a queue manager on a different machine specifying the hostname and channel configuration.


Your lack of faith in the previous poster is disturbing.

You can also obtain the same effect by setting the hostname etc in one of the client configuration methods laid out in the Client manual. If you do that you can stay with the MQCONN call.

tarangsethia wrote:
Can somebody provide an example of that.


There are examples with the product and on the IBM site.

tarangsethia wrote:
If yes can I use the existing MQGET etc api.


Once you've established a connection (using MQCONNX or MQCONN in either of it's forms) and obtained a connection handle that's all the other calls need.
_________________
Honesty is the best policy.
Insanity is the best defence.
Back to top
View user's profile Send private message
bower5932
PostPosted: Thu Oct 30, 2008 12:46 pm    Post subject: Reply with quote

Jedi Knight

Joined: 27 Aug 2001
Posts: 3023
Location: Dallas, TX, USA

tarangsethia wrote:
If I use MQCONNX, will I be able to connect to a queue manager on a different machine specifying the hostname and channel configuration. Can somebody provide an example of that. If yes can I use the existing MQGET etc api.


The WMQ product already provides a sample - amqscnxc.c.
Back to top
View user's profile Send private message Send e-mail Visit poster's website AIM Address Yahoo Messenger
tarangsethia
PostPosted: Fri Oct 31, 2008 11:34 am    Post subject: Reply with quote

Newbie

Joined: 30 Oct 2008
Posts: 3

I use the below code and I get 2058 when connecting from a different machine. When I connect from the same machine, it works fine. Can somebody please help.

////////////////////////////////////////////////////////////////
// Declare MQI structures needed
MQOD od = {MQOD_DEFAULT}; // Object Descriptor
MQMD md = {MQMD_DEFAULT}; // Message Descriptor
MQGMO gmo = {MQGMO_DEFAULT}; // get message options
MQHCONN Hcon; // connection handle
MQHOBJ Hobj; // object handle
MQLONG O_options; // MQOPEN options
MQLONG C_options; // MQCLOSE options
MQLONG CompCode; // completion code
MQLONG OpenCode; // MQOPEN completion code
MQLONG Reason; // reason code
MQLONG CReason; // reason code for MQCONN
MQBYTE buffer[512000]; // message buffer
MQLONG buflen; // buffer length
MQLONG messlen; // message length received
char QMName[50]; // queue manager name

//new MQI structures defined
MQCNO Connect_options = {MQCNO_DEFAULT};
/* MQCONNX options */
MQCD ClientConn = {MQCD_CLIENT_CONN_DEFAULT};
char *p_argConnName = "10.58.165.39(1416)"; /* connection name from user */
char *p_argChannelName = "EDPODS.SVRCONN";/* channel name from user */

//p_argConnName = "10.58.165.38(1416)"; /* connection name from user */
//p_argChannelName = "EDPODS.SVRCONN";/* channel name from user */
MQLONG Selector; /* selector for inquiry */
////////////////////////////////////////////////////////////////

O_options = MQOO_INPUT_AS_Q_DEF // open queue for input
+ MQOO_FAIL_IF_QUIESCING; // but not if MQM stopping

iterations = 0; //count total pnrs processed
int errors = 0; //start count of errors
int successes = 0; //start success count between errors

strcpy(QMName, manager);
strcpy(od.ObjectName, queue);

////MQ connection name and channnel name configuration added.
strcpy(ClientConn.ConnectionName,
p_argConnName);
strcpy(ClientConn.ChannelName,
p_argChannelName);
/* Point the MQCNO to the client connection definition */
Connect_options.ClientConnPtr = &ClientConn;
/* Client connection fields are in the version 2 part of the
MQCNO so we must set the version number to 2 or they will
be ignored */
Connect_options.Version = MQCNO_VERSION_2;

MQCONNX(QMName, /* queue manager */
&Connect_options, /* options for connection */
&Hcon, /* connection handle */
&CompCode, /* completion code */
&CReason); /* reason code */
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic  Reply to topic Page 1 of 1

MQSeries.net Forum Index » IBM MQ API Support » MQ C/C++ api for linux
Jump to:  



You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Protected by Anti-Spam ACP
 
 


Theme by Dustin Baccetti
Powered by phpBB © 2001, 2002 phpBB Group

Copyright © MQSeries.net. All rights reserved.