Programao procedural e orientada a objetos pode ser realizada utilizando Visual Basic, C, C + +, Java e COBOL. Microsoft Windows NT Tecnologia ActiveX / COM tambm suportado. No importa quo grande ou complexo de um aplicativo MQSeries seja, ele sempre tem que executar certas operaes comuns da mesma forma como qualquer outro MQSeries aplicao. Estes so os blocos de construo de qualquer aplicativo de mensagens e em suas mensagens simples tem que ser construdo, colocado sobre filas e ser consumido a partir das filas. Claro, haver sempre necessidade de ser um cdigo especial para verificar erros e excees, bem como o cdigo necessrio para interpretar as mensagens e ter a aes apropriadas com base no contedo da mensagem. Descritos abaixo so alguns dos padres de fluxo mais comuns que podem ser usadas em aplicaes MQSeries, e nos captulos seguintes vamos mostrar exemplos de como estes podem ser codificados usando diferentes APIs.
1.1.1 O que so padres? Os padres so tcnicas de programao que so usados para tratar projeto recorrente problemas que surgem em situaes de projeto especfico. De um modo geral, os padres de tentar apresentar solues para esses problemas recorrentes com base na experincia daqueles que se deparar com eles muitas vezes no passado. Este livro analisa a solicitao / resposta e publish / subscribe padres dentro do contexto da MQSeries mensagem orientada produtos middleware.
1.1.2 One-to-one fluxos de mensagens Um one-to-one ou ponto-a-ponto de aplicao (ver Figura 1-1) construdo em torno da conceito de filas de mensagens, remetentes e receptores. Cada mensagem dirigida a uma fila especfica, e um segundo programa recebe mensagens de que fila. Filas de manter todas as mensagens enviadas para eles at que as mensagens so ou consumidos ou at que as mensagens expirar.
Um-para-um sistema de mensagens tem as seguintes caractersticas: - Cada mensagem tem apenas um consumidor. - No h dependncias temporais entre um emissor e um consumidor de um mensagem. O consumidor pode receber a mensagem ou no estava funcionando quando o remetente colocar as mensagens na fila. - O consumidor mensagem pode, se necessrio, pode reconhecer a bem sucedida processamento de uma mensagem atravs do envio de uma resposta de volta para o remetente. - One-to-one de mensagens pode ser usado quando todas as mensagens que voc colocar em uma fila deve ser processado com sucesso por um consumidor.
Um um-para-um fluxo de mensagens, que no necessita de resposta muitas vezes referido como um enviar e esquecer padro.
1.1.3 One-to-many mensagem flui Um fluxo de mensagens de um-para-muitos (ver Figura 1-2) diferente da de um-paraum fluxo em que as mensagens so colocadas em uma fila, como antes, mas podem ser lidos a partir desse fila por vrios processos. Isso pode ser para fins de balanceamento de carga, ou, simplesmente, que a informao de mensagem tem de ser utilizada de diferentes maneiras atravs cada processo demorado ou de navegao. Novamente filas reter todas as mensagens enviado para eles at que as mensagens so ou consumidos ou at que as mensagens expirar.
Um-para-muitos mensagens tem as seguintes caractersticas: - Cada mensagem tem mais do que uma possvel aplicao que vai ler ou consumi-lo. - No h nenhuma dependncia de tempo entre um emissor e consumidores de um mensagem. Os consumidores podem obter as mensagens ou no eram execuo quando o remetente colocar as mensagens na fila. - Consumidores a mensagem pode, se necessrio, reconhecer o sucesso processamento de uma mensagem atravs do envio de uma resposta de volta para o remetente. One-to-many de mensagens pode ser usado quando todas as mensagens que voc colocar em uma fila deve ser processado com sucesso por vrios processos ou consumidores.
Muitos a um sistema de mensagens tem as seguintes caractersticas: - No h dependncias temporais entre os remetentes e um consumidor de um mensagem. O consumidor pode receber a mensagem ou no estava funcionando quando o remetente colocar as mensagens na fila. - A mensagem consumidor pode, se necessrio, pode reconhecer a bem sucedida processamento de uma mensagem atravs do envio de uma resposta de volta para o remetente. Many-to-one de mensagens pode ser usado quando as mensagens que voc colocar em uma simples fila de vrios processos esto a ser processado com sucesso por um consumidor.
"Futebol". O tema Finanas tem um subtema, chamado "stocks". Em a publicao / assinatura do modelo, os editores e assinantes podem ser dissociados.
Qualquer aplicativo pode publicar mensagens para um determinado tema, por exemplo, um aplicao de publicar o resultado de um jogo de beisebol ao tpico chamado de "Baseball". Qualquer aplicao por sua vez pode recuperar mensagens de um tpico, assinando o que tpico. Em publish / subscribe modelos, editores e assinantes podem ser adicionados dinamicamente, permitindo assim que o sistema para aumentar ou diminuir de forma dinmica. Cada aplicao que se inscreve em um tpico obtm sua prpria cpia das mensagens publicado a esse tpico. A publicao / assinatura do modelo facilitada por um software componente chamado Message Broker. A corretora mantm a mensagem assinaturas para a hierarquia tpico.
identificar uma mensagem de solicitao e sua mensagem de resposta com o uso de uma identificao de correlao. O ID de correlao definido pelo o aplicativo de envio da mensagem de solicitao. O pedido de gerar o mensagem de resposta copia o ID de correlao da mensagem de solicitao para o mensagem de resposta enviada de volta para o aplicativo, que originalmente enviou o pedido mensagem. O aplicativo que enviou a mensagem de solicitao pode usar a correlao ID para mapear a mensagem de resposta mensagem de pedido que foi enviado anteriormente. Adicionalmente, voc tambm pode usar eficazmente as filas temporrias ou tpicos temporrios com a pedido / resposta padro.
2 - Mensagens e as APIs
Neste captulo vamos discutir em termos gerais, as opes de programao que o programador da aplicao enfrenta ao decidir sobre o mais adequado rota programao de tomar. De um breve panorama das opes de idioma, para o modelos de programao, tentamos fazer o processo de escolher o caminho certo linguagem mais fcil e mais simples. Ns introduzimos as diferentes interfaces de programao suportadas pelo MQSeries para desenvolvimento de aplicaes, operao e gerenciamento do sistema.
Na primeira fase, chamada de fase de preparao, o gerenciador de transaes avalia o status de cada um dos gestores de recursos envolvidos na transao. Todo o gestores de recursos deve estar pronto para confirmar a transao antes do gerenciador de transaes pode continuar com a prxima fase. Uma vez que os gerenciadores de transaes ter recebido uma resposta de todas as transaes gerentes, a segunda fase ou fase de consolidao conclui a transaco. Aqui o gerenciador de transaes instrui os gestores de recursos para cometer o transao se todos acordaram, ou reverter, se pelo menos um discorda. Reverso o lugar onde o gerenciador de transaes foi inseguro sobre o estado de qualquer um dos recursos participantes. A transao teria sido em um estado em dvida e, portanto, quaisquer alteraes que possam ter estado em vias de ser feito precisa ser resolvido por devolv-los ao seu estado original.
2.2.2 especificao XA
A especificao XA uma parte do XA Distributed Transaction Processing modelo de organizao do Open Group. A interface de XA um bidirecional interface, que consistem de um conjunto de tipo UNIX API. Junto com as funes que ele oferece, a especificao XA fornece uma base de dados de comutao estrutura que contm o nome do gerenciador de recursos, os ponteiros no nulos para o APIs do gerenciador de recursos, uma bandeira, e uma palavra da verso. Desta forma, os programas que utilizam as APIs do gerenciador de recursos acessar a funo atravs das indicaes fornecidas em esta estrutura ao invs de usar os nomes das funes reais, ou ter que ligar para o programa de servio que realmente contm as funes. Isto d um adicional nvel de portabilidade, uma vez que o gerente de recursos pode ser alterada sem o programador ter que recompilar a aplicao. Para obter informaes mais detalhadas sobre esta API, consulte a X / Open publicaes disponveis. As informaes podem ser encontradas em: http://www.opengroup.org
Em uma transao, se as mensagens so colocadas em uma fila, eles s so visveis para outras aplicaes depois de toda a transao foi confirmada. Da mesma forma, se dentro de mensagens de transaco so destrutivamente de uma fila, no esto ser excludo da fila at que a transao est realmente comprometida de modo que nenhum outro programa seria capaz de recuper-los, entretanto. Uma vez que as mensagens de uma unidade de trabalho so devolvidas fila quando uma devoluo ocorre, o programa de processamento dessas mensagens pode entrar em um loop infinito, processamento de uma mesma unidade de trabalho e outra vez e simplesmente encontrar o mesmo problema de cada vez. Para evitar essa situao, MQSeries mantm o controle do nmero de vezes que ele foi apoiada no atributo BackoutCount. Dessa forma, se a mensagem repetidamente faz com que a unidade de trabalho falhar, o valor deste atributo ser eventualmente exceder o valor no
BackoutThreshold, que definido quando a fila est definida. A aplicao pode decidir retirar a mensagem da unidade de trabalho e coloc-lo em outro fila, ou tomar alguma outra ao corretiva para que a unidade de trabalho pode comprometer a planejado. Podemos usar monofsico ou confirmao de duas fases em MQSeries, dependendo do requisitos da aplicao, o que significa que as funes do MQSeries filas pode ser introduzido dentro do escopo de uma unidade de trabalho, gerido pelo MQSeries ou outro gerenciadores de transaes, tais como CICS, IMS, Encina, Tuxedo e Top-End. Se a coordenao transao vai ser feita pelo MQSeries, unidades de trabalho pode ser local para o gerenciador de filas MQSeries ou global, envolvendo outros gestores de recursos, tais como bancos de dados relacionais.
Ordem lgica significa que as mensagens pertencentes a um grupo so lidos na sua corrigir a ordem, mesmo se alguma outra mensagem ou mensagens chegam para a fila no meio do grupo. Isto, claro, exige que o programa para identificar o grupo de mensagens que vai trabalhar com, o que feito dando o MQGET chamar a identificao do grupo de mensagens na estrutura MQMO. MQSeries tambm permite que o programa necessita para todo o grupo de estar disponveis antes de uma operao de obteno pode ser feito com a primeira mensagem da fila (o primeiro mensagem da fila deve estar presente para ser capaz de ver o grupo em tudo). Por Fazendo isso, o desenvolvedor do programa pode se concentrar na lgica de negcio e deixar o grupo ordenao manuseio para o gerenciador de filas.
Por outro lado, mesmo se a ordem do grupo no um problema, a identificao do grupo pode ser til em termos de manter juntos um grupo conceitual de informaes que seu sistema utiliza, para que as mensagens de um determinado grupo pode ser dado um especfico tratamento depois. MQSeries fornece um outro nvel de agrupamento de mensagens chamado de segmentao. O finalidade de segmentao dar ao programador a oportunidade para dividir um mensagem em vrios segmentos. Isto usado principalmente quando as mensagens so maiores do que o tamanho mximo configurvel de uma mensagem, quer no MQSeries configurao ou no prprio programa. Com a segmentao, mensagens grandes pode ser dividida em menores, de modo que as mensagens eles podem ser lidos a partir de fila nos buffers menores. Isto d o programador a oportunidade de trabalhar com pedaos mais manejveis de informao antes da mensagem inteira chegou. Se toda a mensagem tem que ser recebidos antes algum trabalho pode ser realizado sobre ele, voc pode usar um modelo transacional para que o mensagem pode ser comprometida depois que todas as peas esto disponveis na fila. O mesmo pode ser feito com o agrupamento. Um segmento de uma mensagem identificado pela a identificao de grupo, MsgSeqNumber e Deslocamento.
2.4.1 MQI
O MQSeries Mensagem Queue Interface (MQI) extremamente rico interface de programao que permite o acesso do programador para todas as instalaes de a plataforma MQSeries mensagens, juntamente com um controle detalhado sobre as mensagens e a forma como eles se comportam. As chamadas MQI permitem que voc: - Ligao programas e desligue programas de, um gerenciador de filas - Objetos de abrir e fechar, como filas, gerenciadores de filas, name lists e processos - Coloque mensagens em filas - Obter (remove) mensagens de uma fila, ou procur-los (deixando-os na fila) - Informe-se sobre os atributos dos objetos do MQSeries, e definir algumas das atributos de filas
- Comprometer e fazer as mudanas feitas dentro de uma unidade de trabalho, em ambientes onde no h apoio syncpoint natural, por exemplo OS / 2 e UNIX sistemas - Coordenar fila atualizaes gerente e atualizaes feitas por outros recursos Gerentes. A API MQI proporciona estruturas de dados e de tipos para ser usada como a entrada e sada das chamadas.Ele tambm fornece um amplo conjunto de constantes nomeadas que podem ser usado para modificar as opes apresentadas nessas estruturas de dados. O MQI consistente em todas as plataformas suportadas para as aplicaes pode ser movido para um diferente plataforma sem modificaes no cdigo.
2.4.2 AMI
A interface de mensagem de Aplicao (AMI) fornece programadores com um muito interface simples que pode ser usado para trabalhar com objetos do gerenciador de filas. Com o AMI, o programador no precisa ter um conhecimento profundo de todos os MQI chamadas, mas pode se concentrar na lgica de negcio da aplicao. este significa menos erros de programao e uma maior flexibilidade para lidar com negcios e mudanas tecnolgicas. IAM reduz a quantidade de cdigo que necessrio para escrever um nova aplicao Principais caractersticas do IAM so: - Reduzida (aplicao) a sobrecarga de administrao - Funo mudou de aplicao para AMI - Suporte para diferentes modelos de programao de aplicativos - Cross-plataforma e linguagem mltipla (orientada a objeto e processuais) apoiar - Chamadas de API simples
2.4.3 C + +
A interface do C + + MQSeries uma extenso da API MQI. Ele d a programador de uma abordagem orientada a objetos para a interface de mensagens em MQSeries. O C + + MQI fornece todos os recursos disponveis na API MQI, tais como a obteno, colocando mensagens e navegao. Ele tambm permite que voc para saber e definir objeto opes. Alm disso, oferece os seguintes recursos: - Inicializao automtica de MQSeries estruturas de dados - Just-in-time conexo gerenciador de filas e filas de abertura - Fechamento fila implcita e gerenciador de filas desconexo
- Transmisso cabealho letra morta e recebimento - IMS transmisso cabealho Ponte e recibo - Transmisso de mensagem de cabealho de referncia e recebimento - Recebimento da mensagem gatilho - CICS transmisso cabealho Ponte e recibo - Transmisso cabealho trabalho e recebimento - Definio do canal do cliente
2.4.5 Java
As classes do MQSeries para Java (MQSeries base de Java) permite ao programador escrever um aplicativo ou applet em linguagem de programao Java para: - Ligue para MQSeries como um cliente MQSeries - Conectar-se diretamente a um servidor MQSeries MQSeries base de Java permite que os applets Java, aplicativos e servlets para emitir chamadas e consultas para o MQSeries. O programador pode escolher para se conectar diretamente para um servidor MQSeries ou para se conectar ao MQSeries como um cliente MQSeries. Este d acesso a aplicativos de mainframe e legados, normalmente atravs da Internet, sem necessariamente ter qualquer outro cdigo MQSeries na mquina do cliente. Alm disso, as aplicaes escritas usando as classes do MQSeries para Java pode perceber uma significativa reduo de custos em um ambiente onde um grande nmero de desktops precisam ser atualizados periodicamente com a verso mais recente do software. isto porque uma vez que o cdigo de byte inicialmente transferido para a mquina do usurio, o verso mais recente do software baixado automaticamente cada vez que o software posteriormente utilizado.
2.4.6 JMS
O Java Message Service, ou JMS a API padro para troca de mensagens na mesma forma que a API JDBC para bancos de dados. A Especificao JMS (1.0.2) foi desenvolvida pela Sun Microsystems com a participao activa da IBM e outros fornecedores de mensagens empresariais, fornecedores de processamento de transaes e Vendedores de RDBMS. JMS fornece um modelo comum para os programas Java para interagir com os sistemas de mensagens executar vrias operaes contra o messaging objetos de sistemas. As operaes mais comuns que um programa usa contra um O objetivo de sistemas de mensagens so criar mensagens, enviar mensagens, receber mensagens e ler mensagens do sistema de mensagens corporativas. JMS fornece uma maneira comum para programas que esto sendo desenvolvidos em Java para acessar estes sistemas de mensagens. Agora que ns cobrimos as vrias opes de alto nvel, passamos a discutir cada um por sua vez, junto com exemplos de programao reais.
- Coordenar fila atualizaes gerente e atualizaes feitas por outros recursos Gerentes. O MQI fornece um conjunto de chamadas ou funes para executar essas operaes, juntamente com estruturas de dados e de tipos para ser usada como a entrada e sada de chamadas. Ele Tambm proporciona um grande conjunto de constantes nomeadas que podem ser usados para modificar o opes apresentadas nessas estruturas de dados. Estruturas de dados tambm pode ser inicializado com os valores padro fornecidos pela API na forma de constantes nomeadas. O MQI consistente em todas as plataformas suportadas para que os aplicativos podem ser movido para uma plataforma diferente sem alteraes de cdigo, embora isto possa exigem que o programador adicione um pouco de lgica para garantir a portabilidade. Por exemplo: #ifdef _OS2 OS/2 specific code #else generic code #endif MQI programas podem ser executados em um servidor ou ambiente cliente. Algumas restries se aplicam quando o programa est para ser usado num ambiente de cliente, uma vez que a ligao o gerenciador de filas no pode estar em modo de ligao. Alm disso, algumas variveis de ambiente so necessrios em uma configurao cliente para o aplicativo pode encontrar o servidor MQSeries. Por favor, consulte o MQSeries Clientes, GC33-1632, para obter informaes detalhadas sobre como configurar um ambiente de cliente.
3.2 Platforms and languages These are the platforms and languages supported by MQI: - For MQSeries for MVS/ESA: COBOL Assembler language C PL/I
-For MQSeries for AS/400: RPG COBOL C C++ -For MQSeries for AT&T GIS UNIX, MQSeries for Digital OpenVMS, MQSeries for SINIX and DC/OSx, and MQSeries for SunOS: COBOL C - For MQSeries for HP-UX and MQSeries for Sun Solaris: COBOL C C++ - For MQSeries for AIX, MQSeries for OS/2 Warp, and MQSeries for Windows NT: COBOL C C++ PL/I - For MQSeries for Tandem NonStop Kernel: COBOL C TAL - For MQSeries for Windows: C Visual Basic
These are the libraries and stub programs supported by MQI. MQSeries for AS/400 In MQSeries for AS/400, you must bind your ILE C/400 programs and RPG/400 static calls to the supplied AMQZSTUB service program. MQSeries for Windows In MQSeries for Windows, you must link your program to the MQI library files supplied for the environment in which you are running your application, in addition to those provided by the operating system: _ MQM16.LIB server for 16-bit C _ MQM.LIB server for 32-bit C _ MQM16.LIB server for 16-bit Visual Basic _ MQMSTD.LIB server for 32-bit Visual Basic MQSeries for Windows NT In MQSeries for Windows NT, you must link your program to the MQI library files supplied for the environment in which you are running your application, in addition to those provided by the operating system: _ MQM.LIB server for 32-bit C _ MQIC.LIB client for 16-bit C _ MQIC32.LIB client for 32-bit C _ MQMXA.LIB static XA interface for C _ MQMCICS.LIB CICS for Windows NT V2 exits for C _ MQMCICS4.LIB Transaction Server for Windows NT, V4 exits for C _ MQMZF.LIB installable services exits for C _ MQMCBB.LIB server for 32-bit IBM COBOL _ MQMCB32 server for 32-bit Micro Focus COBOL _ MQICCBB.LIB client for 32-bit IBM COBOL _ MQICCB32 client for 32-bit Micro Focus COBOL _ MQMENC.LIB dynamic XA interface in C for Encina _ MQMTUX.LIB dynamic XA interface in C for Tuxedo MQSeries for AIX In MQSeries for AIX, you must link your program to the MQI library files supplied for the environment in which you are running your application, in addition to those provided by the operating system.
In a non-threaded application, these are as follows: _ libmqm.a server for C _ libmqic.a client for C _ libmqmzf.a installable service exits for C _ libmqmxa.a XA interface for C _ libmqmcbrt.o MQSeries runtime library for Micro Focus COBOL support _ libmqmcb.a server for COBOL _ libmqicb.a client for COBOL In a threaded application, these are as follows: _ libmqm_r.a server for C _ libmqmzf_r.a installable service exits for C _ libmqmxa_r.a XA interface for C _ libmqmxa_r.a for Encina MQSeries for HP-UX In MQSeries for HP-UX, you must link your program to the MQI library files supplied for the environment in which you are running your application, in addition to those provided by the operating system. In a non-threaded application, these are as follows: _ libmqm.sl server for C _ libmqic.sl client for C _ libmqmzf.sl installable service exits for C _ libmqmxa.sl XA interface for C _ libmqmcbrt.o MQSeries runtime library for Micro Focus COBOL support _ libmqmcb.sl server for COBOL _ libmqicb.sl client for COBOL In a threaded application, these are as follows: _ libmqm_r.sl server for C _ libmqmzf_r.sl installable service exits for C _ libmqmxa_r.sl XA interface for C
MQSeries for Sun Solaris In MQSeries for Sun Solaris, you must link your program to the MQI library files supplied for the environment in which you are running your application in addition to those provided by the operating system. These are as follows: _ libmqm.so server for C _ libmqmzse.so for C _ libmqic.so client for C _ libmqmcs.so client for C _ libmqmzf.so installable service exits for C _ libmqmxa.a XA interface for C
As diferentes opes e informaes bsicas necessrias para executar essas operaes pode ser fornecido utilizando as estruturas de dados e os tipos de dados elementares fornecidas pelos a API. Estas so as estruturas de dados MQI: - MQBO (Comece opes) Especifica opes para a chamada MQBEGIN (MQSeries Verso apenas 5 produtos). - MQCNO (opes Connect) Especifica opes para a chamada MQCONNX (MQSeries Verso apenas 5 produtos). - MQDH (cabealho Distribution) Descreve os dados que se encontram presentes em uma mensagem sobre uma fila de transmisso quando essa mensagem uma mensagem de distribuiolist (MQSeries Verso 5 produtos e MQSeries para AS/400 apenas). - MQGMO (Get opes de mensagem) Especifica opes para a chamada MQGET. - MQMD (descritor de mensagem) Fornece informaes de controle para a mensagem que voc est colocando em (usando MQPUT ou MQPUT1) ou obter a partir de (usando MQGET) uma fila. - MQMDE (extenso descritor Mensagem) Em conjunto com uma verso MQMD 1, este contm a mensagem e agrupados informaes segmentao que normalmente seriam realizadas na verso MQMD 2 (MQSeries Verso 5 produtos e MQSeries para AS/400 apenas). - MQOD (Object descritor) Identifica o objeto que voc deseja trabalhar com quando usar MQOPEN. - MQOR (registro Object) Identifica os destinos que voc deseja trabalhar em uma lista de distribuio (MQSeries Verso 5 produtos e MQSeries para AS/400 V4R2 apenas). - MQPMO (Coloque as opes de mensagem) Especifica opes para a MQPUT e MQPUT1 chamadas. - MQPMR (registro Put-mensagem) Contm informaes especficas relativas aos destinos individuais includas no uma lista de distribuio (MQSeries Verso 5 produtos e MQSeries para AS/400 S V4R2).
As seguintes estruturas so utilizadas para fins especiais: - MQDLH (cabealho Dead-carta) Define o formato do cabealho das mensagens de colocar na letra-morta (undelivered-message) fila (no suportado em MQSeries para Windows V2.0). - MQRMH (cabealho da mensagem de Referncia) Define o formato de uma mensagem de referncia (MQSeries Verso 5 produtos e MQSeries para AS/400 apenas). - MQTM (mensagem de disparo) Define o formato de uma mensagem de disparador. - MQTMC (mensagem de disparo) Define o formato de uma mensagem de disparo como um conjunto de campos de caracteres (MQSeries para AS/400 apenas). - MQTMC2 (mensagem de disparo) Define o formato de uma mensagem de disparo incluindo o nome do gerenciador de filas (MQSeries para MVS / ESA, o MQSeries em sistemas UNIX, o MQSeries para OS / 2 Deformar, e MQSeries para Windows NT apenas). - MQXP (bloco parmetro Exit) estrutura Usado para se comunicar com a sada API-crossing (MQSeries para MVS / ESA apenas). - MQXQH (cabealho fila de Transmisso) Define o formato do cabealho que adicionada s mensagens colocadas numa fila de transmisso. Para C e Visual Basic, MQI fornece os seguintes tipos de dados elementares: MQBYTE A single byte of data MQBYTEn A string of 16, 24, 32, or 64 bytes MQCHAR One single-byte character MQCHARn A string of 4, 8, 12, 16, 20, 28, 32, 48, 64, 128, or 256 single-byte characters MQHCONN A connection handle (this data is 32 bits long) MQHOBJ An object handle (this data is 32 bits long) MQLONG A 32-bit signed binary integer PMQLONG A pointer to data of type MQLONG
Conforme explicado nas sees anteriores, a MQI um conjunto de funes e tipos de dados que permitem ao programador enviar e receber mensagens. As diferentes funes aceitar entrada / sada de parmetros, de modo a ser compatvel entre todos os idiomas listados. Geralmente, um programa de aplica MQI um simples fluxo de operaes como demonstrado na Figura 3-1 na pgina 31. 1. O programa deve primeiro se conectar a um gerenciador de filas, usando o MQCONN chamar. 2. Uma vez que a conexo foi estabelecida com sucesso, um ou muitos objetos pode ser aberto usando a chamada MQOPEN. 3. Qualquer nmero de operaes, como obter ou colocar as operaes, pode ser realizada em cada objeto at que o objeto no mais necessrio. 4. Em seguida, o objeto pode ser fechado usando a chamada MQCLOSE. 5. A conexo do gerenciador de filas descartado usando a chamada MQDISC.
Primeiro, rever alguns dos elementos comuns de todas essas chamadas, ento vamos dar uma olhar para as chamadas necessrias para conectar e desconectar de um gerenciador de filas e como abrir e fechar os objetos do MQSeries Uma vez que tenhamos feito isso, ns revisamos as quatro operaes bsicas que podem ser realizada com o MQI: - Colocar mensagens em uma fila - Recebendo mensagens de uma fila - Vendo mensagens em uma fila - Indagando e definindo os atributos de objeto Qualquer nmero de operaes bsicas podem ser realizadas dentro das chamadas de abertura / fechamento.
Ns no ir proporcionar a especificao de cada chamada de funo detalhe, uma vez que este no o objetivo deste Redbook, mas voc pode consultar a programao de aplicativo Guia de referncia e de programao de aplicativo que vem com o MQSeries produto. Aqui vamos tentar apresentar uma breve descrio das possibilidades que voc tem com esta API para que voc possa descobrir se suas necessidades podem ser resolvidos com esta API e como.
- O cdigo de razo MQCC_NONE se o cdigo de concluso MQCC_OK. Se no, algum outro valor retornado explicar a causa do alerta ou insucesso relatado no cdigo de concluso.
3. Mensagem 1, a prioridade 1 (o cursor browse est aqui) 4. Mensagem 3, a prioridade 1 Neste caso, o programa no capaz de ver a Mensagem 4 at que se abre a refila ou move o cursor de procura para o topo da fila utilizando o Opo MQOO_BROWSE_FIRST. A ordem lgica, por outro lado, est principalmente relacionado com agrupamento mensagem e segmentao. Neste caso, as mensagens so apresentadas na fila agrupados por GroupId e os grupos so ordenados de acordo com a posio fsica da primeira mensagem do grupo. Segmentos de mensagens possuem o mesmo comportamento. Por exemplo, vamos tomar a seguinte sequncia de mensagens enviadas para uma fila: 1. Mensagem 1 lgico (no ltima) do grupo 123 2. Mensagem 1 lgico (no ltima) do grupo 456 3. Mensagem lgico 2 (ltimo) do grupo 456 4. Mensagem lgico 2 (no ltima) do grupo de 123 5. Lgico mensagem 3 (ltima) do grupo 123 Essa mensagem ser exibida para a aplicao na seguinte seqncia: 1.Mensagem 1 lgico (no ltima) do grupo 123 2. Mensagem lgico 2 (no ltima) do grupo de 123 3. Lgico mensagem 3 (ltima) do grupo 123 4. Mensagem 1 lgico (no ltima) do grupo 456 5. Mensagem lgico 2 (ltimo) do grupo 456 Aqui, o mesmo problema explicado com a FIFO dentro de prioridade pode ser encontrada, desde que as partes de um grupo de mensagem pode chegar na fila aps o browse cursor tiver sido posicionada para a prxima mensagem de grupo.
Como entrada para MQCONN devemos fornecer o nome do gerenciador de filas, ou um nulo comeando corda se queremos abrir a fila padro. Alm disso, o MQCONNX chamada permite especificar algumas opes em relao ao mtodo de ligao (se a conexo vinculativa ou no vinculativa). A sada dessas chamadas so: - Os cdigos de resultado (concluso e cdigo de razo). - Uma conexo de lidar com o gerenciador de filas. O alcance de uma chamada de conexo geralmente o fio que emite a chamada. Referir o guia de programao de aplicativos para obter informaes detalhadas sobre o escopo consideraes sobre cada plataforma. O fragmento de cdigo a seguir mostra como se conectar a um gerenciador de filas utilizando o C MQI:
Esta chamada recebe: - Um identificador de conexo retornado por a chamada MQCONN. - A descrio do objeto que deseja abrir, na forma de um descritor de objeto (MQOD) estrutura. - Uma ou mais opes que controlam a ao da chamada. A sada para esta chamada: - Os cdigos de resultado (concluso e cdigo de razo). - Um identificador de objeto que representa o seu acesso ao objeto. - A estrutura do objeto-descriptor modificado, se o objeto foi aberta uma dinmica fila. Ns nos concentramos em como abrir um objeto de fila na prxima seo. para mais informaes sobre como abrir os outros tipos de objetos, consulte o Guia de Programao de Aplicativos.
Filas de abertura(Open Queues) No MQI, o nico tipo disponvel do recipiente mensagem uma fila. As filas podem ser quer para a sada ou as mensagens de entrada e aplicvel a todos os padres descritos nas Captulo 1, "Introduo e padres" na pgina 3. Existem trs tipos de fila a partir de uma perspectiva de programador:
_ Local queues _ Remote queues _ Dynamic queue
Filas locais e remotos representam filas reais definidos no gerenciador de filas a partir de uma perspectiva administrativa. Eles diferem principalmente na maneira como o nome do fila pode ser especificado no campo ObjectName da estrutura de dados MQOD. O nome de uma fila local o especificado no gerenciador de filas local. O nome de uma fila remota pode ser referido pelo nome da fila remota como conhecido pelo gerenciador de filas local, ou pelo nome da fila remota gerente. Se o nome do gerenciador de filas remoto usado, ento o Campo ObjectQMgrName deve especificar: - O nome da fila de transmisso, que tem o mesmo nome que o telecomando gerenciador de filas. - O nome de um objeto fila de alias que resolve a fila de transmisso que tem o mesmo nome do gerenciador de filas remoto.
O fragmento de cdigo a seguir mostra como abrir uma fila local ou remoto usando o local, nome do gerenciador de fila:
Filas dinmicos so criados sob demanda e so destrudos uma vez que eles no so mais em uso. Eles no so criados a nvel administrativo em MQSeries. para exemplo, eles podem ser utilizados em um cenrio de pedido / resposta, onde o solicitante especifica um "a resposta" fila. Para criar uma fila dinmica, usamos um modelo conhecido como uma fila modelo que criado administrativamente, junto com uma chamada MQOPEN. O nome do fila dinmica pode ser especificado no campo DynamicQName do MQOD estrutura. O nome pode ser especificada em trs maneiras: - Dar um nome completo, no mais do que 33 caracteres. - Dar um nome parcial, caso em que voc pode especificar determinados prefixos para o nome da fila de seguir por um asterisco (*). O gerenciador de filas, em seguida, gera um nome exclusivo usando o prefixo especificado. - Permitir que o gerenciador de filas para gerar um nome completo, especificando um asterisco (*) no primeiro caracter. Se a fila dinmica criada com xito, a estrutura do objeto-descritor retornou com o nome real da fila dinmica do campo de objecto. O fragmento de cdigo a seguir abre uma fila dinmica e, em seguida, imprime o seu nome:
Abrindo listas de distribuio As listas de distribuio permitem que voc coloque uma mensagem para vrias filas em um nico MQPUT ou MQPUT1 chamar. A fim de fazer isso, a lista de distribuio deve ser aberta usando a chamada MQOPEN com os seguintes parmetros de entrada: - Um identificador de conexo - Informaes genricas na estrutura descritor Objeto (MQOD) - A estrutura do descritor de objeto (MQOD) deve especificar MQOD_VERSION_2 no campo Verso e do nmero de estruturas a ficha objecto (que o mesmo que o nmero de filas que deseja abrir) deve ser especificado no Campo RecsPresent. - O nome de cada fila que voc deseja abrir, usando a estrutura de registro de objeto (MQOR). O resultado desta chamada : - Um identificador de objeto que representa o seu acesso lista de distribuio. - Um cdigo de realizao genrica. - A razo cdigo genrico. - Registros de resposta (estrutura MQRR), contendo os cdigos de resultado (concluso e razo de cdigo) para cada destino. Um registro MQOR deve ser fornecido para cada destino, como uma combinao de o nome da fila e nome do gerenciador de fila. O endereo dessa matriz de filas de destino pode ser especificado de duas maneiras: - Usando o campo ObjectRecOffset offset, dando o deslocamento do primeiro elemento na matriz a partir do incio da estrutura MQOD. Isto comum quando se utiliza COBOL, por exemplo:
- Usando o campo ObjectRecPtr ponteiro, dando o endereo da matriz de Registros MQOR. Esta a abordagem habitual em C, por exemplo
A estrutura MQRR contm a concluso e cdigo de razo para um determinado de destino na lista de distribuio. Se qualquer um dos destinos no conseguem abrir, este MQRR variedade nos permite reconhecer a fila com o problema e tomar algumas ao corretiva. Consulte o Exemplo 3-1.
Algumas outras opes disponveis quando abrir uma fila so considerados em sua contexto especfico nas seguintes sees.
Para fechar um MQSeries object usamos a chamada MQCLOSE. MQCLOSE (Hconn, Hobj, Options, CompCode, Reason) Esta chamada recebe a seguinte entrada: - Lidar com uma conexo. - O identificador do objeto que deseja fechar. - As opes mais prximos. O resultado desta chamada : - Os cdigos de resultado (concluso e cdigo de razo). - A ala do objeto, para repor o valor MQHO_UNUSABLE_HOBJ. A menos que voc est fechando uma fila dinmica permanente, as opes prximos sero MQCO_NONE. Normalmente uma fila dinmica excludo uma vez que o programa que criou o que chama de uma MQCLOSE para essa fila, mas no caso de filas dinmicas permanentes, eles pode ser retida pelo gerenciador de filas ou excludos, dependendo das opes utilizadas na chamada MQCLOSE.
recomendado que voc feche todos os objetos do MQSeries antes da aplicao acabamentos.
Para esta chamada, voc deve fornecer o identificador de conexo para o gerenciador de filas. Depois a execuo desta chamada, o identificador de conexo ter um
O resultado desta chamada : - Os cdigos de resultado (concluso e cdigos de razo). - Atualizado descritor de mensagem e as opes se a chamada foi executado com sucesso. A fila deve ser aberto com a opo MQOO_OUTPUT, antes de qualquer nmero de chamadas para esta funo pode ser feita. O descritor de mensagem de actualizao ir ter a MsgId da mensagem, se a primeira estrutura solicitou que o gerenciador de filas gerar um valor nico para o mensagem. A estrutura opes retorna com o nome da fila e a fila gerente para que a mensagem foi enviada.
Voc tambm pode colocar mensagens para uma lista de distribuio. A mensagem enviada para todos os filas na lista de distribuio com uma nica MQPUT ou MQPUT1 chamada.Neste caso os parmetros de entrada de chamadas MQPUT esto: - Lidar com uma conexo. - Um identificador de objeto para a lista de distribuio aberto usando chamada MQOPEN, como mostrado anteriormente neste captulo. - A estrutura do descritor de mensagem (MQOD). - Informaes de controle geral. - Informaes de controle na forma de Put Mensagem Registros (MQPMR). - O comprimento dos dados contidos na mensagem. - A mensagem em si.
O resultado desta chamada : - Os cdigos de resultado (concluso e cdigos de razo). - Registros de resposta. A estrutura MQPMR d informaes especficas do destino para alguns campos que podem ser diferentes daqueles j na estrutura MQMD.
MQGET (Hconn, Hobj, MsgDesc, GetMsgOpts, BufferLength, Buffer,DataLength, CompCode, Reason) Os parmetros de entrada para este concurso so: - Lidar com uma conexo. - A pega fila. - A descrio da mensagem que queremos obter da fila na forma de um Estrutura MQMD. - Informaes de controle na forma de um GET Opes de Mensagens (MQGMO) estrutura. - O tamanho da memria intermdia, em que a mensagem vai ser armazenado. - O endereo do buffer. O resultado desta chamada : - Os cdigos de resultado (razo e cdigos de concluso). - A mensagem no buffer especificado, se a chamada for concluda com xito. - A estrutura de opes, modificada para mostrar o nome da fila a partir do qual a mensagem foi recuperada. - A estrutura do descritor de mensagem, com a informao de que a mensagem est recuperada. - O comprimento real da mensagem.
- Feche a fila usando a chamada MQCLOSE. Ao navegar mensagens, da mesma forma como quando recebendo mensagens de um fila, as mensagens so apresentadas em qualquer ordem fsica ou lgica
- Ou a opo MQGMO_BROWSE_NEXT MQGMO_BROWSE_FIRST ou. - A opo MQGMO_ACCEPT_TRUCATED_MSG. - Tamanho do buffer de zero (0). Devolve o tamanho da mensagem no parmetro DataLength. Indagando sobre a criao e atributos do objeto Para saber mais sobre os atributos de um objeto, podemos usar a chamada MQINQ. MQINQ (Hconn, Hobj, SelectorCount, Selectors, IntAttrCount, IntAttrs,CharAttrLength, CharAttrs, CompCode, Reason)
Como entrada para esta chamada, que deve fornecer: - Lidar com uma conexo. - Um identificador de objeto, conforme retornado pela chamada MQOPEN. O objecto pode ser aberta qualquer um dos possveis objetos especificados no 3.5.3, "Abrindo objetos do MQSeries" na pgina 35. - O nmero de seletores. - Uma matriz de seletores de atributos. Os seletores podem representar tanto um integer (MQIA_ *) ou personagem (MQCA_ *) atributos e podem ser especificadas em qualquer ordem. - O nmero de atributos inteiros sendo perguntou. - Uma matriz de variveis inteiras onde a chamada retorna os atributos inteiros especificada. - O comprimento do caracter atribui tampo. O tampo deve ser de pelo menos o soma do comprimento de todos os atributos de carter perguntou. - O buffer de caracteres onde a chamada coloca os valores dos atributos de caracteres perguntou. A sada para esta chamada : - Um conjunto de valores de atributo inteiros copiados para a matriz. - O buffer no qual os atributos de caracteres so retornados. - Os cdigos de resultado (concluso e cdigos de razo). Uma lista completa dos atributos selectores podem ser encontrados no Pedido Programao de Referncia.
No caso dos atributos de caracteres, o tampo resultante preenchida com os atributos valores, um aps o outro, com um comprimento fixo. Se o valor real de qualquer destas atributos menor do que o comprimento fixo do atributo, o resto do espao preenchido com espaos em branco. Se qualquer um dos atributos requeridos para o objecto (neste caso, um fila) faz no aplicvel a esse tipo de fila, o espao preenchido com um asterisco (*). Exemplo 3-6 mostra como obter informaes sobre os atributos de uma fila:
Definindo atributos de objeto Somente os objetos da fila aceitar uma operao de conjunto. Para definir atributos de uma fila que usamos a chamada MQSET. MQSET (Hconn, Hobj, SelectorCount, Selectors, IntAttrCount, IntAttrs,CharAttrLength, CharAttrs, CompCode, Reason)
Os parmetros para essa chamada so os mesmos daqueles da chamada MQINQ. Todos eles so parmetros de entrada, exceto o cdigo de concluso e cdigo de razo. Estes so os atributos que podem ser definidos usando a chamada MQSET: _ InhibitGet (but not for remote queues) _ DistList _ InhibitPut _ TriggerControl _ TriggerType _ TriggerDepth _ TriggerMsgPriority _ TriggerData Example 3-7 shows how to inhibit put operations on a queue:
Uma unidade global de trabalho comea quando uma chamada feita MQBEGIN. Se uma unidade local de trabalho j foi iniciado, a chamada MQBEGIN falha com um MQRC_UOW_IN_PROGRESS razo.
Nesta seo, vamos explorar os padres apresentados no Captulo 2, "Mensagens e as APIs "na pgina 11 usando o C ANSI implementao da API MQI em um Ambiente Microsoft Windows. Todos estes exemplos podem ser modificados para trabalhar com qualquer outra plataforma e linguagem disponvel. O cdigo completo para estes exemplos podem ser encontrados nos materiais adicionais que pode ser baixado do site da IBM Redbooks.
A seguir, apresentamos um exemplo simples de cada um deles. Os dados de mensagem utilizados nestes exemplos no tem qualquer lgica comercial, mas o exemplo pode ser facilmente modificado para ser aplicado numa situao real. Enviar e esquecer (Send-and-forget) Este exemplo simples do padro send-and-forget contm dois programas. o primeiro um age como o remetente da mensagem, enquanto o segundo atua como a mensagem consumidor. Sem resposta ou reconhecimento est prevista para o remetente e nada enviado de volta pelo consumidor. O programa transmissor mostrado no Exemplo 3-8 segue o fluxo lgico a seguir: -Conectar a um gerenciador de filas - Abra a fila de PTP.QUEUE.LOCAL para a sada - Prepara-se uma mensagem a ser enviada - Envie a mensagem para a fila aberto - Fechar a fila - Desconectar-se do gerenciador de filas
- A funo PutPublication Esta funo responsvel por enviar os comandos reais publicao para o corretor usando a fila de fluxo. - A funo principal Esta funo constri a mensagem publicao e envia-lo para o fluxo fila. Exemplo 3-12 apresenta a funo BuildMQRHeader descrito acima. Este cdigo foi tomada a partir das amostras C que vm com o Publish / Subscribe SupportPac.
Assinante (Subscriber)
O programa assinante aqui apresentado basicamente dividido em quatro funes: - A funo BuildMQRFHeader Esta funo constri uma estrutura de dados MQRFH e acrescenta o exigido valor / par no final dessa estrutura. - A funo CheckForResponse Esta funo aguarda um reconhecimento de assinatura do corretor, e que valida a inscrio foi aceita com sucesso. - A funo PubSubCommand Esta funo cria e envia um comando publish / subscribe para o corretor e verifica a resposta corretor utilizando a funo CheckForResponse. - A funo principal Esta funo proporciona dois comportamentos possveis, dependendo do nmero de parmetros utilizados ao chamar este programa: - Se dois parmetros so especificados, o primeiro parmetro tomado como o cliente fila onde o corretor ir enviar as publicaes para o cliente, e o segundo parmetro utilizado como o CorrelationID usado para identificar o publicao deste cliente especfico. A principal funo registra o cliente com o tema e comea um loop infinito ficando publicaes. - Se um terceiro parmetro for especificado, a funo principal de-registra o cliente do tema e acabamentos. A funo CheckResponse usa a funo PrintNameValueString, que basicamente imprime os pares nome / valor para a tela. Esta funo no mostrado aqui, mas est disponvel nos materiais adicionais que podem ser baixados da Web site da IBM Redbooks. Exemplo 3-15 mostra a funo BuildMQRHeader descrito acima. Este cdigo foi tomada a partir das amostras C que vm com o Publish / Subscribe SupportPac.