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 » General IBM MQ Support » MQSeries - CICS design related queries

Post new topic  Reply to topic
 MQSeries - CICS design related queries « View previous topic :: View next topic » 
Author Message
babu_murugesan
PostPosted: Wed Nov 22, 2006 6:54 am    Post subject: MQSeries - CICS design related queries Reply with quote

Novice

Joined: 11 Nov 2006
Posts: 19

Hi All,

I have few questions about the MQSeries- CICS design. Can you please answer for these questions.

Assume:
Up to 2000 concurrent users to be supported.
MQ listener program written in COBOL, started by CICS when message arrives in an initiation queue.

1. Single request queue vs. multiple queues:
Will a single request queue cause any performance bottleneck ?
Would having a different request queue for each type of message (ultimately up to approx. 1000, but initially about 150) cause problems for CICS i.e. having multiple trigger monitor running using up CICS resources ?

2. Message reading:
Our current messaging system via APPC on LU6.2 receives the message in chunks dynamically allocating memory to store it as required.
It looks as if with MQ we read the entire message at once. This means that we will have to statically allocate the maximum possible amount of memory required for a message in our MQ listener program. (The MQ listener is triggered from the initiation queue for every new message).
This means that every CICS transaction will have lots of potentially redundant memory allocated for it, for the duration of the MQ listener transaction.
At what sort of maximum message size would this become a problem ?

One possible way around this would be to have different types of message written to different request queues and inquire on the queue before we read the message to get the maximum message length for that queue. Memory would then be allocated dynamically for that maximum size.
Is this a viable solution ?

Alternatively, if we read a message then discover it is too long for our receiving variable, we could allocate more memory then try and read it again. Is there any guarantee that we can re-read the same message ? Can it be ‘locked’ to prevent another process reading it (without performance implications?)

3. Message processing
We will be dealing exclusively with on-line transaction requests and have therefore decided to trigger the MQ listener every time a new request is received.
This will just read one request from the queue and have one attempt at processing it within any one invocation of the MQ listener.
Is this the best approach to adopt for on line request or should we have a program runs continually, monitoring the queue for messages and dispatching them ?

The MQ listener will simply be reading a message off a queue then starting another CICS transaction to process it. The only other scenario it is dealing with is the ‘poison message’ one where we end up trying to process the same message more than once, this is being dealt with via the backout threshold that MQ keeps.
Are there any other scenarios that should be dealt with ?

4.Transaction id, userid :
We do not want all the transactions to run under the same CICS default non-terminal transid and userid.
The only way we can think of changing this is to start the correct transaction id under the user’s userid (passed in the message header).
This involves setting up all the users as surrogates of the default userid in RACF.
CICS will do an authorisation check to RACF for each transaction – does this have any performance implications ?
Is there a better way of achieving this ?

5.MQ setup :
In our test and development environments there are many CICS reqions.
Would you normally have one instance of MQ running per CICS region, or one MQ to cover many CICS regions ?
If the later is the case we would need to have some environment specific part to each queue name – this would need to be derivable at run time to avoid having to change the code (or configuration tables) as we promote through different environments.

6.Security :
The stateless, asynchronous messaging approach seems inherently less secure than
the stateful, session based way we currently employ.
What sort of security needs to be employed to ensure the system is at least as secure as at the moment ?

7.CICS Design - How would MQ work with CICS (TOR/AOR), MQ and CICS Work Load manager integration?


Please let me know your valuable comments .

Thanks,
Babu M
Back to top
View user's profile Send private message
fjb_saper
PostPosted: Wed Nov 22, 2006 2:11 pm    Post subject: Reply with quote

Grand High Poobah

Joined: 18 Nov 2003
Posts: 20756
Location: LI,NY

  1. One trigger queue/monitor can accommodate multiple triggered queues.
    You should not create another trigger queue/monitor unless it is for a) security reasons, b)VERY HIGH volume that you want to split...
  2. What you propose is certainly a viable solution but poke around you might find a better way...
  3. Remember MQ is essentially asynchronous. I can follow your logic but to avoid overburdening CICS should the case arise you really should limit the resources used -- like T classing the transactions...
    Even though it is trigger EVERY the processing program should still be written as if it were trigger FIRST...
    You may want to move poison messages to a backout queue. You may also want to log all of your activity in such a way that it makes easy processing for summaries...(#of transaction/day, $, etc...)
  4. Don't know CICS so I can't answer on this point
  5. You will need one initiation queue in each CICS region. You can then determine where you will trigger the transaction by having a variation on the queue name. Each queue has it's own initiation queue an therefore triggered CICS region.
    Alternatively you can have an MQ cluster with each qmgr in a different CICS region and let the cluster workload do the balancing...

Sorry for the other points somebody with more CICS knowledge/experience will have to answer those...

Enjoy

_________________
MQ & Broker admin
Back to top
View user's profile Send private message Send e-mail
fat_tony
PostPosted: Sun Dec 03, 2006 10:52 am    Post subject: Reply with quote

Novice

Joined: 02 Dec 2006
Posts: 15

1) You can have many input queues if you wish, however it sounds like you don't actually need to have more than one in your case.

2) Why do you need separate queues to achieve this? Just do this:

a\ Browse the queue, obtaining the message data length, msgid and correlid (set the length to zero before this browse for max efficiency)
b\ Getmain some storage using the obtained length and set the address of a linkage field to reference the new storage. Set the length of the linkage field to be variable using occurs depending clause in Cobol, and set the depending on field to the data length.
c\ Do a destructive GET into your linkage field using msgid/correlid match.

Hey presto, you got your message and can now do whatever you wish with it. You may need to forward it to another program, if it's bigger than 32K you can use TSQs, MQ or pointers to avoid commarea limits (don't recommend pointers in this case). I think > CICS v3 gives other options. And don't forget to freemain the storage and start again if this is trigger type FIRST.

3) I recommend trigger type FIRST as it's easier to manage. But it's your choice.

4) I don't think this is possible, and I also don't know why you need to do this. Is your MQ channel not secure?

5) What fjb_saber said

6) If your channels aren't secure then yes, it is less secure. If you lock down your channels then you also need to make sure you lock the box that's using the channel. Then your CICS services can run under a proxy RACF authorisation with trust.

7) You should only implement MQ in CICS as a server in an AOR. You could create a new AOR to separate MQ traffic, using the same codeset and database as your other CICS services. MQ started tasks can be assigned to customised WLM tasks, and CICS transactions running from MQ initiation are just CICS services and take normal WLM grouping.
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 » General IBM MQ Support » MQSeries - CICS design related queries
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.