Você está na página 1de 60
Enterprise Integration Systems Message Brokers

Enterprise Integration Systems

Enterprise Integration Systems Message Brokers
Enterprise Integration Systems Message Brokers
Enterprise Integration Systems Message Brokers

Message Brokers

Enterprise Integration Systems Message Brokers

Bibliography

Biztalk Server Video “Module 5:

Routing BizTalk Messages”

http://msdn.microsoft.com/en-us/

biztalk/hh403499.aspx

“Module 5: Routing BizTalk Messages” –   http://msdn.microsoft.com/en-us/ biztalk/hh403499.aspx © 2012 IST 2

© 2012 IST

2

Outline

The Broker Concept •Routing-level Integration •Process-level integration •Biztalk Server Integration

Communication-level integration in BizTalk Server

Reliable assynchronous integration with MSMQ and Biztalk Server.

in BizTalk Server –   Reliable assynchronous integration with MSMQ and Biztalk Server. © 2012 IST

© 2012 IST

3

Introdução

Basic MOM:

in basic MOM it is the sender who specifies the identity of the receivers

it is the sender who specifies the identity of the receivers sender receiver message broker core

sender

receiver

message broker core

message broker core

of the receivers sender receiver message broker core Message brokers: with message brokers, custom message
of the receivers sender receiver message broker core Message brokers: with message brokers, custom message

Message brokers:

with message brokers, custom message routing logic can be defined at the message broker level or at the queue level

be defined at the message broker level or at the queue level message broker Alonso ,

message broker

Alonso, Casati, Kuno, Machiraju, “Web Services: Concepts, Architectures, Applications”, Springer, 2004

Routing baseado em conteúdo

Routing baseado em conteúdo •   cada tipo de mensagem destina-se 
 a um canal/aplicação diferente,

cada tipo de mensagem destina-se a um canal/aplicação diferente, ou •o mesmo tipo de mensagem segue para um canal de destino mediante certas condições

p.ex.: Quantidade > 500

o mesmo tipo de mensagem segue para um canal de destino mediante certas condições –  
o mesmo tipo de mensagem segue para um canal de destino mediante certas condições –  

Routing com base em processos

Routing com base em processos •   vantagem: muito maior flexibilidade •   vantagem: ponto central
Routing com base em processos •   vantagem: muito maior flexibilidade •   vantagem: ponto central

vantagem: muito maior flexibilidade •vantagem: ponto central de controlo •desvantagem: pode limitar desempenho

muito maior flexibilidade •   vantagem: ponto central de controlo •   desvantagem: pode limitar desempenho

Orquestração

Orquestração
Orquestração
Orquestração
Orquestração
Orquestração
Orquestração
Orquestração
Orquestração
Orquestração
Orquestração
Orquestração
Orquestração
Orquestração
Orquestração

Message broker: visão geral

Orquestrador Aplicação Aplicação Plataforma de mensagens
Orquestrador
Aplicação
Aplicação
Plataforma de mensagens
Message broker: visão geral Orquestrador Aplicação Aplicação Plataforma de mensagens

2 Modos de Integração

routing ao nível das mensagens routing ao nível da orquestração

de Integração •   routing ao nível das mensagens •   routing ao nível da orquestração

© 2012 IST

9

routing ao nível das mensagens

Orquestrador Aplicação Aplicação Plataforma de mensagens
Orquestrador
Aplicação
Aplicação
Plataforma de mensagens
routing ao nível das mensagens Orquestrador Aplicação Aplicação Plataforma de mensagens

routing ao nível da orquestração

Orquestrador Aplicação Aplicação Plataforma de mensagens
Orquestrador
Aplicação
Aplicação
Plataforma de mensagens
routing ao nível da orquestração Orquestrador Aplicação Aplicação Plataforma de mensagens

Message brokers

Message-oriented middleware

IBM MQSeries / WebSphere MQ

Java Message Service (JMS)

Microsoft Message Queuing (MSMQ)

etc. (Oracle AQ, Apache ActiveMQ, etc.)

(MSMQ) –   etc. (Oracle AQ, Apache ActiveMQ, etc.) •   Message brokers –   IBM
(MSMQ) –   etc. (Oracle AQ, Apache ActiveMQ, etc.) •   Message brokers –   IBM

Message brokers

IBM WebSphere Message Broker / WebSphere ESB
Glassfish / Open ESB + NetBeans
Microsoft BizTalk Server
webMethods Integration Server etc. (Oracle Fusion, JBoss SOA platform, etc.)

BizTalk Server –   webMethods Integration Server   etc. (Oracle Fusion , JBoss SOA platform, etc.)
–

Exemplo: BizTalk

Orquestração

XML ou Flat File

Exemplo: BizTalk Orquestração XML ou Flat File Receive Send Port Port MessageBox
Exemplo: BizTalk Orquestração XML ou Flat File Receive Send Port Port MessageBox
Receive Send Port Port MessageBox
Receive
Send
Port
Port
MessageBox

MessageBox

é uma base de dados e também um broker

guarda informação de mensagens e propriedades

guarda informação de subscritores

despacha mensagens para subscritores

armazena mensagens se for necessário

teoricamente, é possível ter várias MessageBox

load balancing

umas fazem routing, outras processam

é possível ter várias MessageBox –   load balancing –   umas fazem routing, outras processam
Message Brokers INTEGRAÇÃO AO NÍVEL DAS MENSAGENS © 2012 IST 15

Message Brokers

INTEGRAÇÃO AO NÍVEL DAS MENSAGENS

Message Brokers INTEGRAÇÃO AO NÍVEL DAS MENSAGENS © 2012 IST 15

© 2012 IST

15

Integração ao nível das mensagens

Receive Send Port Port A MessageBox Send Port B Filtro Port Customer = XYZ A
Receive
Send Port
Port
A
MessageBox
Send Port
B
Filtro
Port
Customer =
XYZ
A
Send Port
Price > 1000
B
C
Qty < 500
C

Anatomia de um receive port

Adaptador Adaptador Adaptador Receive Receive Receive Pipeline Pipeline Pipeline Receive Receive Receive
Adaptador
Adaptador
Adaptador
Receive
Receive
Receive
Pipeline
Pipeline
Pipeline
Receive
Receive
Receive
Location
Location
Location
Mapa de Transformação
Receive Port

Mensagem recebida por uma de várias receive locations

Adaptador (File, HTTP, SQL, etc.)

Pipeline (PassThru, XML, customizada)

Mapa de transformação (opcional)

Anatomia de um send port

Adaptador Send Pipeline Mapa Filtro Send Port
Adaptador
Send
Pipeline
Mapa
Filtro
Send Port
port Adaptador Send Pipeline Mapa Filtro Send Port Mensagem enviada para o exterior Adaptador (File, HTTP,

Mensagem enviada para o exterior

Adaptador (File, HTTP, SQL, etc.)

Pipeline (PassThru, XML, customizada)

Mapa de transformação (opcional)

Filtro (opcional)

Filtros em send ports

têm uma expressão lógica

p.ex.: produto = ‘iogurte’ AND quantidade <=

10

a porta subscreve as mensagens que obedecem à expressão

múltiplas portas com filtros diferentes permitem implementar content-based

routing

Filtro 1 Send Port Filtro 2 Send Port MessageBox
Filtro 1
Send Port
Filtro 2
Send Port
MessageBox

Receive Port

diferentes permitem implementar content-based routing Filtro 1 Send Port Filtro 2 Send Port MessageBox Receive Port

Promoção de propriedades

as propriedades usadas nas expressões dos filtros têm de ser promovidas

p.ex. filtro 1: produto = ‘iogurte’ AND quantidade <= 10

p.ex. filtro 2: produto = ‘natas’ AND validade < 3 dias

Promover as propriedades “produto”, “quantidade” e “validade”

Filtro 1 Send Port Filtro 2 Send Port MessageBox
Filtro 1
Send Port
Filtro 2
Send Port
MessageBox

Receive Port

“produto”, “quantidade” e “validade” Filtro 1 Send Port Filtro 2 Send Port MessageBox Receive Port

Promoção de propriedades:

criar um property schema (adicional)

representa os dados importantes para integração

promover os campos da mensagem original

indica que a mensagem contém alguns desses dados

•   indica que a mensagem contém alguns desses dados Property Schema Produto Quantidade Validade Schema
Property Schema Produto Quantidade Validade
Property
Schema
Produto
Quantidade
Validade
Schema Produto Quantidade Data Validade Preço
Schema
Produto
Quantidade
Data
Validade
Preço

Message brokers

exemplo com uma só propriedade (Quantity)

Message brokers –   exemplo com uma só propriedade (Quantity )

Promoção de propriedades

noutros schemas

exemplo de promoção do campo Quantity

Promoção de propriedades noutros schemas –   exemplo de promoção do campo Quantity

Promoção de propriedades

no Tutorial 1, Quantity foi “distinguida”

para ser possível aceder ao valor na orquestração

aqui estamos a ver propriedades “promovidas”

para ser possível aceder ao valor ao nível das mensagens

aqui estamos a ver propriedades “promovidas” •   para ser possível aceder ao valor ao nível

Propriedades Promovidas vs. Distinguidas

Orquestração

Propriedades distinguidas
Propriedades
distinguidas
Receive Send Port Port MessageBox
Receive
Send
Port
Port
MessageBox

Propriedades

promovidas

Propriedades da mensagem

Propriedade distinguida

corresponde a uma expressão XPath

usada para expressões e código nas orquestrações

não é acessível à MessageBox

Propriedade promovida

necessita de um “property schema

usada em filtros e content-based routing

acessível à MessageBox e a todos os componentes

exige algum processamento adicional (performance)

–   acessível à MessageBox e a todos os componentes –   exige algum processamento adicional

Integração ao nível das mensagens

Property Schema Send Filtro Schema Port Send Filtro Port Send Filtro MessageBox Port
Property
Schema
Send
Filtro
Schema
Port
Send
Filtro
Port
Send
Filtro
MessageBox
Port

Receive

Port

mensagens Property Schema Send Filtro Schema Port Send Filtro Port Send Filtro MessageBox Port Receive Port
mensagens Property Schema Send Filtro Schema Port Send Filtro Port Send Filtro MessageBox Port Receive Port

Integração ao nível das mensagens: processamento

1. receber mensagem numa receive port 2. extrair propriedades promovidas da mensagem 3. consultar filtros dos subscritores

neste caso os subscritores são send ports

em geral, também podem ser orquestrações

4. enviar a mensagem para os subscritores 5. manter um registo para efeitos de monitorização

semelhante a queue journal no sistema MSMQ

–
Message Brokers INTEGRAÇÃO AO NÍVEL DA ORQUESTRAÇÃO © 2012 IST 29

Message Brokers

INTEGRAÇÃO AO NÍVEL DA ORQUESTRAÇÃO

Message Brokers INTEGRAÇÃO AO NÍVEL DA ORQUESTRAÇÃO © 2012 IST 29

© 2012 IST

29

Integração ao nível da orquestração

também há send ports e receive ports

na orquestração as portas são “lógicas”

ao nível das mensagens as portas são “físicas”

é preciso fazer a ligação (port binding) entre as duas

em vez de filtros:

routing é dado pelo fluxo da orquestração

a shape permite caminhos alternativos com base em expressões com propriedades distinguidas

mapas de transformação

aparecem na shape Transform, não nos portos

com propriedades distinguidas •   mapas de transformação –   aparecem na shape Transform , não

Integração ao nível da orquestração

Receive Port Send Port Send Port
Receive
Port
Send
Port
Send
Port
Integração ao nível da orquestração Receive Port Send Port Send Port RequestInstance.Item.Quantity >

RequestInstance.Item.Quantity >

Integração ao nível da orquestração

Integração ao nível da orquestração Send Port Send Port MessageBox Receive Port
Send Port Send Port MessageBox
Send
Port
Send
Port
MessageBox

Receive

Port

Integração ao nível da orquestração Send Port Send Port MessageBox Receive Port
Message Brokers IMPLEMENTAÇÃO DE 
 TUTORIAL 1 COM MENSAGENS © 2012 IST 33

Message Brokers

IMPLEMENTAÇÃO DE TUTORIAL 1 COM MENSAGENS

Message Brokers IMPLEMENTAÇÃO DE 
 TUTORIAL 1 COM MENSAGENS © 2012 IST 33

© 2012 IST

33

Cenário do “Tutorial 1”

Armazém Pedido Não = Não aprovado
Armazém
Pedido
Não = Não aprovado

Quantidade <= 500 ?

Sistema ERP

Sim = Aprovado
Sim = Aprovado
Cenário do “Tutorial 1” Armazém Pedido Não = Não aprovado Quantidade <= 500 ? Sistema ERP

Implementação com Mensagens

Quantidade <= 500 Send Sistema Port ERP Request Request Receive Broker Armazém Port (BizTalk) Request
Quantidade <= 500
Send
Sistema
Port
ERP
Request
Request
Receive
Broker
Armazém
Port
(BizTalk)
Request Denied
Send
Mapa
Port
Quantidade > 500
ERP Request Request Receive Broker Armazém Port (BizTalk) Request Denied Send Mapa Port Quantidade > 500

Implementação do Tutorial 1 sem orquestração

1. criar schemas Request e RequestDenied 2. criar property schema com Quantity 3. promover Quantity no Request.xsd 4. criar mapa Request -> RequestDenied

5. criar 1 receive port e 2 send ports

6. configurar o filtro da porta “request accepted7. configurar mapa e filtro da porta “request denied

o filtro da porta “ request accepted ” 7.   configurar mapa e filtro da porta

1. Criar os schemas Request e RequestDenied

1. Criar os schemas Request e RequestDenied

2. Criar property schema

RequestProperties.xsd

2. Criar property schema RequestProperties.xsd
2. Criar property schema RequestProperties.xsd

Message brokers

3. Promover Quantity no schema Request

Message brokers 3. Promover Quantity no schema Request

4. Criar mapa Request -> RequestDenied

4. Criar mapa Request -> RequestDenied
4. Criar mapa Request -> RequestDenied

5. Configurar e fazer deploy da aplicação

5. Configurar e fazer deploy da aplicação

6. Criar receive port e receive location

6. Criar receive port e receive location
7. Criar a send port para pedidos aceites e configurar filtro

7. Criar a send port para pedidos aceites e configurar filtro

7. Criar a send port para pedidos aceites e configurar filtro
7. Criar a send port para pedidos aceites e configurar filtro
7. Criar a send port para pedidos aceites e configurar filtro
7. Criar a send port para pedidos aceites e configurar filtro Quantity <= 500

Quantity <=

500

7. Criar a send port para pedidos aceites e configurar filtro Quantity <= 500
8. Criar a send port para pedidos negados e configurar mapa e filtro
8. Criar a send port para pedidos
negados e configurar mapa e filtro

Request -> MapToReqDenied -> RequestDenied

e filtro Request -> MapToReqDenied -> RequestDenied EAISolutionWithoutOrchestration. Quant ity > 500

EAISolutionWithoutOrchestration.Quant ity > 500

e filtro Request -> MapToReqDenied -> RequestDenied EAISolutionWithoutOrchestration. Quant ity > 500

9. Iniciar a aplicação

estado das portas

enlisted/ unenlisted

com / sem subscrição

started/ stopped:

activo (à escuta) / não activo

unenlisted •   com / sem subscrição –   started/ stopped : •   activo (à
unenlisted •   com / sem subscrição –   started/ stopped : •   activo (à

Mesma Função que em “Tutorial 1”

sem orquestrações,

com content-based routing

Quantidade <= 500 Send Sistema Port ERP Request Request Receive Broker Armazém Port (BizTalk) Request
Quantidade <= 500
Send
Sistema
Port
ERP
Request
Request
Receive
Broker
Armazém
Port
(BizTalk)
Request Denied
Send
Mapa
Port
Quantidade > 500

Limitação: aplicações online

solução é assíncrona, mas supõe as aplicações estão todas online ao mesmo tempo

um pedido aceite é enviado para o sistema ERP e o sistema recebe-o nesse momento

como tornar a solução mais flexível?

com filas de mensagens

uma fila para os pedidos uma fila para os pedidos negados uma fila para os pedidos aceites

•   uma fila para os pedidos •   uma fila para os pedidos negados •

Cenário do Tutorial 1 ao nível das mensagens

e agora também com filas de mensagens (MSMQ)

Sistema ERP
Sistema
ERP
Quantidade <= 500 Send Port Request requests Receive Broker Port (BizTalk) Request Denied Send Mapa
Quantidade <= 500
Send
Port
Request
requests
Receive
Broker
Port
(BizTalk)
Request Denied
Send
Mapa
Port
Quantidade > 500
(BizTalk) Request Denied Send Mapa Port Quantidade > 500 requests Request accepted Armazém requests denied
(BizTalk) Request Denied Send Mapa Port Quantidade > 500 requests Request accepted Armazém requests denied

requests Request accepted

Armazém requests denied
Armazém
requests
denied

10. Parar a aplicação

10. Parar a aplicação

11. Criar as filas

requests •requestsdenied •requestsaccepted

11. Criar as filas •   requests •   requestsdenied •   requestsaccepted
11. Criar as filas •   requests •   requestsdenied •   requestsaccepted

12. Alterar receive location

de FILE para MSMQ e configurar nome da fila

12. Alterar receive location de FILE para MSMQ e configurar nome da fila
12. Alterar receive location de FILE para MSMQ e configurar nome da fila

13. Alterar as send ports para as filas respectivas

13. Alterar as send ports para as filas respectivas
13. Alterar as send ports para as filas respectivas

14. Iniciar a aplicação

14. Iniciar a aplicação
14. Iniciar a aplicação

15. Gerar uma instância de Request.xsd

15. Gerar uma instância de Request.xsd

16. Editar a mensagem

<ns0:Request xmlns:ns0="http:// EAISolutionWithoutOrchestration.Request"> <Header>

<ReqID>123</ReqID>

<Date>2013-03-19</Date>

</Header> <Item> <Description>Iogurte</Description>

<Quantity>3</Quantity>

<UnitPrice>0.50</UnitPrice>

<TotalPrice>1.50</TotalPrice>

</Item>

</ns0:Request>

0.50 </ UnitPrice > < TotalPrice > 1.50 </ TotalPrice > </Item> </ns0:Request>

17. Criar aplicação para enviar pedido (armazém)

string requestMsg = File.ReadAllText("Request.xml");

Ler conteúdo

string queueName = @".\private$\requests";

MessageQueue queue = new MessageQueue(queueName);

Abrir a fila

Message queueMsg = new Message();

Criar mensagem

StreamWriter writer = new StreamWriter(queueMsg.BodyStream);

writer.Write(requestMsg);

writer.Flush();

Colocar

conteúdo na mensagem

); writer.Write ( requestMsg); writer.Flush (); Colocar conteúdo na mensagem queue.Send ( queueMsg); Enviar mensagem

queue.Send(queueMsg);

Enviar

mensagem

18. Ler a resposta da fila (sistema ERP)

string queueName = @".\private$\requestsaccepted"; MessageQueue queue = new MessageQueue(queueName);

Message queueMsg = queue.Receive();

StreamReader reader = new StreamReader(queueMsg.BodyStream); string requestMsg = reader.ReadToEnd();

Console.WriteLine(requestMsg);

= reader.ReadToEnd(); Console.WriteLine ( requestMsg); Abrir a fila Receber mensagem Ler conteúdo da mensagem

Abrir a fila

Receber

mensagem

Ler conteúdo da mensagem

Processar…

19. Pedido aceite e pedido negado – exemplos

Mensagem recebida na fila requestsaccepted Mensagem recebida na fila requestsdenied
Mensagem
recebida na fila
requestsaccepted
Mensagem
recebida na fila
requestsdenied

Conclusão

uma solução de integração pode ser realizada

ao nível das mensagens, com content-based routing

exige promoção de propriedades das mensagens

ao nível da orquestração, com a definição do processo

pode fazer uso de propriedades distinguidas •necessita de propriedades promovidas se usar correlações (porquê?)

fazer uso de propriedades distinguidas •   necessita de propriedades promovidas se usar correlações (porquê?)

Correlações e propriedades promovidas

Instância 1

Instância 2

Instância 3

S S S R R R
S
S
S
R
R
R
MessageBox
MessageBox
1 Instância 2 Instância 3 S S S R R R MessageBox ? Send Port Receive

?

Send

Port

Receive

Port

3 S S S R R R MessageBox ? Send Port Receive Port Necessário promover para
3 S S S R R R MessageBox ? Send Port Receive Port Necessário promover para

Necessário promover para ter acesso às propriedades e identificar a instância