Desenvolvimento de aplicações para a Cloud. AppServiceBus



Documentos relacionados
Desenvolvimento de aplicações para a Cloud. Windows Azure

Computação Orientada aos Serviços. WCF Semestre de Inverno 11/12 (Parte 1)

Desenvolvimento de aplicações para a Cloud. Queue

Computação Orientada aos Serviços. WF (parte 1) Semestre de Inverno 12/13

Trabalho Prático Nº1 Introdução ao C#.NET

Middleware de Aplicações Paralelas/Distribuídas

Desenvolvimento de aplicações para a Cloud. Introdução

Forms Authentication em ASP.NET

A ) O cliente terá que implementar uma interface remota. . Definir a interface remota com os métodos que poderão ser acedidos remotamente

Grupo I [7v] 1. [1,0] Apresente o conteúdo do IDL relativo a este programa. Assuma PROGRAM=62015 e VERSION=1.

Sistemas Distribuídos

SOA Introdução. SOA Visão Departamental das Organizações

UNIVERSIDADE. Sistemas Distribuídos

Grupo I [6v] Considere o seguinte extracto de um programa de definição de uma calculadora apenas com a função soma de dois valores reais

1 Criar uma entity a partir de uma web application que usa a Framework JavaServer Faces (JSF)

Prototype, um Design Patterns de Criação

Prof. Marcelo Cunha Parte 5

IMPLEMENTAÇÃO DE UM AGENTE TAC SCM EM LINGUAGEM AGENTSPEAK(L)

TUTORIAL JAVA AS - HTTP CLIENT COMPOSITION ENVIROMENT 7.1

UNIVERSIDADE. Sistemas Distribuídos

Programação com sockets (em Java)

Grupo I [6,6v] Responda com os valores que se observam depois da chamada acontecer. 1 Falta na mensagem de resposta. Valor retornado na chamada

Prof. Jhonatan Fernando

Utilização do Appia. Tolerância a Faltas Distribuída 2003/04. Nuno Carvalho nunomrc@di.fc.ul.pt

WSDL e UDDI. Pedro Miguel Martins Nunes WSDL. WSDL Exemplo prático Resumo UDDI. Serviço UDDI Estruturas de dados UDDI e WSDL API Resumo

Manual de Integração SMS

Invocação de Métodos Remotos RMI (Remote Method Invocation)

Sistemas Empresariais Integrados

Desenvolvimento de aplicações para a Cloud. Blob

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB)

INT-9: Implementing ESB Processes with OpenEdge and Sonic David Cleary

Informática UFRGS. Programação com Objetos Distribuídos (C. Geyer) C# Remote V0 1

JXTA. Alessandro Vasconcelos Ferreira de Lima.

Enterprise Java Beans

Guia Rápido de Instalação

Universidade Federal de Juiz de Fora Ciência da Computação Sistemas Distribuídos Professor Ciro Barbosa

Grupo I [4v] b. [0,6v] De que forma é que o escalonador do Linux tenta minimizar o impacto desta limitação?

DSS 08/09. Camada de Dados - JDBC. Aula 1. António Nestor Ribeiro /António Ramires Fernandes/ José Creissac Campos {anr,arf,jfc}@di.uminho.

EAI Manual do Administrador

DESENVOLVIMENTO DE UM CLIENTE SOFIA2 (KP) SEGUINDO A ARQUITETURA KP-MODELO

Sistemas Distribuídos. Coulouris Capítulo 4

SISTEMAS DISTRIBUÍDOS

UNIVERSIDADE ESTADUAL DO OESTE DO PARANÁ CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS COLEGIADO DE INFORMÁTICA

Sistemas Distribuídos

Sistemas Multimédia. Arquitectura Protocolar Simples Modelo OSI TCP/IP. Francisco Maia Redes e Comunicações

Configurando o DDNS Management System

Escrito por Daniel Donda Ter, 17 de Fevereiro de :32 - Última atualização Sáb, 03 de Julho de :34

Configuração de Cliente de Web Service HTTPS

Sistemas Empresariais Integrados

JADE : Java Agent DEvelopment Framework JADE

Java Spaces Exemplos

Eng.ª Informática. Redes de Computadores. Frequência. 4 de Julho de 2006

UNIVERSIDADE CATÓLICA PORTUGUESA

Computação Paralela. Desenvolvimento de Aplicações Paralelas João Luís Ferreira Sobral Departamento do Informática Universidade do Minho.

Objetos Distribuídos - Programação Distribuída Orientado a Objetos. Luiz Affonso Guedes

CURSO PRÁTICO. Módulo 2 Pré-requisitos. Application Virtualization 5.0. Nível: Básico / Intermediário

Mozilla Thunderbird. Configuração inicial

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Manipulação de Banco de Dados com Java 1. Objetivos

Programação Paralela e Distribuída. Prof. Cidcley T. de Souza

A interface de uma mensagem é extremamente flexível e permite várias formas de customização de conteúdo. Figura 1 - Tipos de Mensagens JMS

Encapsulamento de Dados

Manual de Integração. Tecnologia: WebServices SOAP XML. Área: CDC. Produto: CDC Pessoa Física NFE (RFB) Versão: 1.0. Autor: Angelo Bestetti Junior

Computação Móvel 2007/2008

Solução Integrada de Segurança Serviços IGIF

UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática

Sistemas Distribuídos

DSS 09/10. DSS 09/10 Que métodos é que fazem parte de cada camada? Aplicações Multi-camada JDBC. Aula 3 DSS 09/10

SISTEMAS DISTRIBUIDOS

UFG - Instituto de Informática

Plataforma para Agentes

Persistência de Classes em Tabelas de Banco de Dados

Capítulo II Modelos de Programação Distribuída

FTP FILE F TRANSFER PROTOCOL. Tópicos

Introdução à aplicação Web

Sistemas Distribuídos Arquiteturas Middlewares

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

Universidade da Beira Interior. Sistemas Distribuídos

Alan Menk Santos Redes de Computadores e Telecomunicações. Camada de Aplicação. Camada de Aplicação

Java RMI. Alcides Calsavara

Redes de Computadores. Prof. André Y. Kusumoto

UFG - Instituto de Informática

Manual de Integração. Tecnologia: WebServices SOAP XML. Área: CDC. Produto: CDC Estendida (Física) Versão: 1.0. Autor: Angelo Bestetti Junior

Invocação de Métodos Remotos

AULA 6: SERVIDOR DNS EM WINDOWS SERVER

Web Service - NFS-e. Definição das especificações e critérios técnicos necessários para utilização do WebService. FREIRE INFORMÁTICA Versão 2.

Professor: Macêdo Firmino Disciplina: Sistemas Operacionais de Rede

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

Programação para Internet Avançada. 4. Web Services. Nuno Miguel Gil Fonseca

Message Driven Beans. Apresentação. Introdução Implementação de MDBs Deployment no JBoss Java Messaging Service Exemplo

Publicar uma aplicação ASP.NET Core com base de dados SqlServer no Azure usando Visual Studio e um perfil para publicação (publish profile)

Interfaces de Serviço na Prática. Luciano Oliveira Sr. Instructor, Consultant Global Field Services

Computação Orientada aos Serviços. WF (parte 1) Semestre de Inverno 13/14

Desenvolvimento Web com Framework Demoiselle versão 1.1

Connection String usada por uma Class Library

Lógica de Negócio com WCF

Transcrição:

Desenvolvimento de aplicações para a Cloud AppServiceBus

Enterprise Service Bus Um enterprise service bus (ESB) é um modelo arquitectural de software utilizado para desenhar e implementar a interacção e a comunicação entre aplicações de software que interagem numa arquitetura orientada aos serviços. O desenho e a implementação dos ESBs variam nas diferentes organizações. 2

APPFabric Service Bus 3

Segurança: integração ACS 4

Tipo de Autenticação do cliente <binding name="default"> <security relayclientauthenticationtype="none" /> </binding> Os serviços e os clientes podem escolher autenticar-se por uns dos tipos já configurados: Saml SharedSecret SimpleWebToken Unauthenticated 5

Segurança da mensagem Refere-se à segurança da mensagem que utiliza o AppFabric Service Bus para chegar ao seu destino. O AppFabricServiceBus oferece 4 opções para a segurança de mensagens entre clientes e serviços A enumeração Microsoft.ServiceBus.EndToEndSecurityMode define 4 modos de segurança None Transport Message TransportWithMessageCredential 6

Naming Service O service Bus AppFabric oference um sistema de nomeação DNS-compatible para atribuir um único Internet URIs aos serviços. O AppFabric Service Bus define um root domain name que pode ser resolvido através de Internet DNS, mas oferece um serviço baseado nos namespaces para nomear a hierarquia sob a raíz. [scheme]://[solution-name].servicebus.windows.net/[name]/[name]/ 7

Service Registry O AppFabric Service Bus fornece um serviço de registo e descoberta para os endpoints do serviço, designado por Service Registry. O Service Registry oferece uma solução Atom feed para cada solução. class Program{ static void Main(string[] args){ ServiceHost host = new ServiceHost(typeof(MyService)); ServiceRegistrySettings settings = new ServiceRegistrySettings(); settings.discoverymode = DiscoveryType.Public; foreach(serviceendpoint s in host.description.endpoints) s.behaviors.add(settings); host.open(); Console.WriteLine("Press [Enter] to exit"); Console.ReadLine(); host.close(); }} http://proazure.servicebus.windows.net/ 8

Messaging Fabric O Windows Azure Service Bus fornece duas soluções de messaging: Relayed Messaging Service Bus Brokered Messaging Queue Relay Aplicação Aplicação 9

Relayed Messaging O relay service suporta o modelo de comunicação Relayed Messaging. É uma componente do Service Bus centralizada Suporta diferentes protocolos de transporte e stardards dos Web Services Suporta os seguintes tipos de comunicação entre clientes e serviços: One-Way messaging Request-Response messaging Peer to peer messaging Conecções directas entre clientes e serviços 10

Relayed Message pattern 11

Exemplos de App Service Bus Bindings Bindings BasicHttpRelayBinding WebHttpRelayBinding Descrição Utiliza HTTP para o transporte Suporta HTTP, XML... Utilizado normalmente em interfaces REST WSHttpRelayContextBinding Suporta binding de contexto entre o serviço e o relay service. NetTcpRelayBinding Utiliza TCP para o transporte. NetTcpRelayContextBinding Suporta binding de contexto entre o serviço e o relay service. Utiliza TCP para o transporte NetOneWayRelayBinding Suporta mensagens one-way entre o serviço e o relay service. 12

Service Bus Relay Service 13

Utilização do Service Bus Relay É necessário: 1. Criar um service namespace Fornece um contentor de contexto para endereçar os recursos do Service Bus no contexto da nossa aplicação É realizado no Management Portal 2. Obter as credenciais de gestão para o namespace São obtidas através do Management Portal 3. Configurar a aplicação para utilizar o Service Bus 4. Criar um Security Token Provider 14

Exemplo: IProblemSolver using System.ServiceModel; [ServiceContract(Namespace = "urn:ps")] interface IProblemSolver { [OperationContract] int AddNumbers(int a, int b); } interface IProblemSolverChannel : IProblemSolver, IClientChannel {} class ProblemSolver : IProblemSolver { public int AddNumbers(int a, int b) { return a + b; } } 15

System.ServiceModel.ServiceHost ServiceHost sh = new ServiceHost(typeof(ProblemSolver)); sh.addserviceendpoint( typeof (IProblemSolver), new NetTcpBinding(), "net.tcp://localhost:9358/solver ); ServiceEndpoint se= sh.addserviceendpoint( typeof(iproblemsolver), new NetTcpRelayBinding(), ServiceBusEnvironment. CreateServiceUri("sb", "**namespace**", "solver") ); se.behaviors.add(new TransportClientEndpointBehavior { TokenProvider = TokenProvider.CreateSharedSecretTokenProvider("owner", "**key**")} ); sh.open(); Console.WriteLine("Press ENTER to close"); Console.ReadLine(); sh.close(); 16

Ou configurando o ficheiro App.config <services> <service name="service.problemsolver"> <endpoint contract="service.iproblemsolver binding="nettcpbinding" address="net.tcp://localhost:9358/solver"/> <endpoint contract="service.iproblemsolver" binding="nettcprelaybinding" address="sb://**namespace**.servicebus.windows.net/solver" behaviorconfiguration="sbtokenprovider"/> </service> </services> <behaviors> <endpointbehaviors> <behavior name="sbtokenprovider"> <transportclientendpointbehavior> <tokenprovider> <sharedsecret issuername="owner" issuersecret="**key**" /> </tokenprovider> </transportclientendpointbehavior> </behavior> </endpointbehaviors> </behaviors> 17

Configurar o cliente programaticamente var cf = new ChannelFactory<IProblemSolverChannel>( new NetTcpRelayBinding(), new EndpointAddress(ServiceBusEnvironment. CreateServiceUri("sb", "**namespace**", "solver")) ); cf.endpoint.behaviors.add( new TransportClientEndpointBehavior { ); } TokenProvider = TokenProvider. CreateSharedSecretTokenProvider("owner","**key**") using (var ch = cf.createchannel()) { Console.WriteLine(ch.AddNumbers(4, 5)); } 18

Configurar o cliente com ficheiro de configuração <client> <endpoint name="solver" contract="myservice.iproblemsolver" binding="nettcprelaybinding" address="sb://**namespace**.servicebus.windows.net/solver" behaviorconfiguration="sbtokenprovider"/> </client> <behaviors> <endpointbehaviors> <behavior name="sbtokenprovider"> <transportclientendpointbehavior> <tokenprovider> <sharedsecret issuername="owner" issuersecret="**key**" /> </tokenprovider> </transportclientendpointbehavior> </behavior> </endpointbehaviors> </behaviors> 19

Brokered Messaging O modelo de comunicação Brokered Messaging fornece capacidade de comunicação assíncrona ou desacoplada que suportacenários de publish/subscribe, desacoplamento temporal e load balancing. Existem 3 padrões de messaging para este modelo: Queues; Topics/Subscriptions Rules/Actions 20

Service Bus Queues 21

Aplicações das Service Bus Queues Comunicação entre web e worker roles numa aplicação Windows Azure multi-tier Comunicações entre aplicações que não estejam na cloud e aplicações que estejam alojadas na cloud Comunicação entre componentes de uma aplicação distribuída que esteja alojada em organizações diferentes. 22

Criação de uma Service Bus Queue Criar uma queue é um processo multi-passo. É necessário 1. Criar um service namespace Fornece um contentor de contexto para endereçar os recursos do Service Bus no contexto da nossa aplicação É realizado no Management Portal 2. Obter as credenciais de gestão para o namespace São obtidas através do Management Portal 3. Configurar a aplicação para utilizar o Service Bus 4. Criar um Security Token Provider 5. Criar uma Queue 23

3. Configurar a aplicação para utilizar o Service Bus Adicionar a referência Microsoft.ServiceBus.dll Importar os seguintes namespaces: using Microsoft.ServiceBus using Microsoft.ServiceBus.Messaging; 24

4. Criar um security token provider string issuer= <obtido do portal> : string key= <obtido do portal> TokenProvider tp= TokenProvider.CreateSharedSecretTokenProvider(issue,key); TokenProvider 25

Criar uma queue string issuer= <obtido do portal> : string key= <obtido do portal> TokenProvider tp= TokenProvider.CreateSharedSecretTokenProvider(issue,key); Uri uri = ServiceBusEnvironment. CreateServiceUri( sb, MyServiceNamespace, string.empty); NameSpaceManager manager= new NameSpaceManager(uri,tP); manager.createqueue( MyQueue ); QueueDescription qd= new QueueDescription( MyQueue ); qd.maxsizeinmegabytes=5120; qd.defaultmessagetimetolive = new TimeSpan(0,1,0): manager.createqueue(qd); 26

Enviar mensagem a uma queue string issuer= <obtido do portal> : string key= <obtido do portal> TokenProvider tp= TokenProvider.CreateSharedSecretTokenProvider(issue,key); Uri uri = ServiceBusEnvironment. CreateServiceUri( sb, MyServiceNamespace, string.empty); MessagingFactory factory = MessagingFactory.Create(uri, tp); MessageSender myqueue = factory.createmessagesender( MyQueue"); for (int i=0; i<5; i++) { } BrokeredMessage message = new BrokeredMessage("Test message " + i); myqueue.send(message); 27

Receber mensagens de uma queue string issuer= <obtido do portal> : string key= <obtido do portal> TokenProvider tp= TokenProvider.CreateSharedSecretTokenProvider(issue,key); Uri uri = ServiceBusEnvironment. CreateServiceUri( sb, MyServiceNamespace, string.empty); MessagingFactory factory = MessagingFactory.Create(uri, tp); MessageReceiver myqueue = factory.createmessagereceiver( MyQueue"); while (true) { BrokeredMessage message = myqueue.receive(); if (message!= null) { try { Console.WriteLine("Body: " + message.getbody<string>()); Console.WriteLine("MessageID: " + message.messageid); message.complete(); } catch (Exception) {message.abandon(); } } } 28

Sessões // Create a SessionReceiver to get next available session SessionReceiver sr = myqueue.acceptsessionreceiver(receivemode.peeklock); BrokeredMessage message = sr.receive(); try { ProcessMessage(message); message.complete(); } catch (Exception) { message.abandon(); } 29

Windows Azure Queues e Service Bus Queues Critério Windows Azure Queues Service Bus Queues Garantia na ordem Não Sim (FIFO) (através do uso de sessões) Garantia na entrega At-Least-Once At-Least-Once/At-Most-Once Suporte nas transacções Não Sim (utilização de transacções locais) Comportamento de recepção Não bloqueante Bloqueante com ou sem timeout Modo de recepção Peek & Lease Peek & Lock Receive & Delete Modo de acesso exclusivo Lease-Based Lock-Based Duração do Lease/Lock 30 s (omissão) /7 d (máximo) 60 s (omissão) /5 m (máximo) Granularidade do Lease/Lock Ao nível da mensagem Ao nível da queue Recepção em lote 30 Sim (especificar o Message Count) Sim (permitir a propriedade prefetch ou utilizar transacções) Envio em lote Não Sim (com transacções)

Windows Azure Queues e Service Bus Queues -Cotas Critério Windows Azure Queues Service Bus Queues Tamanho máximo da mensagem Tamanho máximo da queue TTL da mensagem máximo 7 dias 64KB (48KB se é utilizado a codificação Base64) 256KB 100 TB 1,2,3,4 ou 5 GB Ilimitado Número máximo de queues Ilimitado 10 000 Número máximo de clientes concorrentes Ilimitado Ilimitado Comparação entre Windows Azure Queues e Service Bus Queues 31

Topics/Subscriptions 32

Criação de um Service Bus Topic É necessário 1. Criar um service namespace Fornece um contentor de contexto para endereçar os recursos do Service Bus no contexto da nossa aplicação É realizado no Management Portal 2. Obter as credenciais de gestão para o namespace São obtidas através do Management Portal 3. Configurar a aplicação para utilizar o Service Bus 4. Criar um Security Token Provider 5. Criar um Topic 33

Criar um topic string issuer= <obtido do portal> : string key= <obtido do portal> TokenProvider tp= TokenProvider.CreateSharedSecretTokenProvider(issue,key); Uri uri = ServiceBusEnvironment. CreateServiceUri( sb, MyServiceNamespace, string.empty); NameSpaceManager manager= new NameSpaceManager(uri,tP); manager.createtopic( MyTopic ); TopicDescription td = new TopicDescription("TestTopic"); td.maxsizeinmegabytes = 5120; td.defaultmessagetimetolive = new TimeSpan(0, 1, 0); manager.createtopic(td); 34

Criar um subscription string issuer= <obtido do portal> : string key= <obtido do portal> TokenProvider tp= TokenProvider.CreateSharedSecretTokenProvider(issue,key); Uri uri = ServiceBusEnvironment. CreateServiceUri( sb, MyServiceNamespace, string.empty); NameSpaceManager manager= new NameSpaceManager(uri,tP); manager.createsubscription( MyTopic, AllMessages ); 35

Enviar mensagens a um topic string issuer= <obtido do portal> : string key= <obtido do portal> TokenProvider tp= TokenProvider.CreateSharedSecretTokenProvider(issue,key); Uri uri = ServiceBusEnvironment. CreateServiceUri( sb, MyServiceNamespace, string.empty); MessagingFactory factory = MessagingFactory.Create(uri, tp); MessageSender mytopic = factory.createmessagesender( MyTopic"); for (int i=0; i<5; i++) { BrokeredMessage message = new BrokeredMessage("Test message " + i); mytopic.send(message); } 36

Receber mensagens de uma subscrição string issuer= <obtido do portal> : string key= <obtido do portal> TokenProvider tp= TokenProvider.CreateSharedSecretTokenProvider(issue,key); Uri uri = ServiceBusEnvironment. CreateServiceUri( sb, MyServiceNamespace, string.empty); MessagingFactory factory = MessagingFactory.Create(uri, tp); MessageReceiver mytopic= factory.createmessagereceiver( MyTopic/subscriptions/AllMessages ); while (true) { BrokeredMessage message = myqueue.receive(); if (message!= null) { try { Console.WriteLine("Body: " + message.getbody<string>()); Console.WriteLine("MessageID: " + message.messageid); message.complete(); } catch (Exception) {message.abandon(); } } } 37

Eliminar Tópicos e Subscrições string issuer= <obtido do portal> : string key= <obtido do portal> TokenProvider tp= TokenProvider.CreateSharedSecretTokenProvider(issue,key); Uri uri = ServiceBusEnvironment. CreateServiceUri( sb, MyServiceNamespace, string.empty); NameSpaceManager manager= new NameSpaceManager(uri,tP); manager.deletetopic( MyTopic ); manager.deletesubscription( MyTopic, AllMessages ); 38

Rules / Actions Podem criar subscrições com filtros para restringir que mensagens, enviadas a um determinado tópico, devem surgir no contexto de uma subscrição a esse mesmo tópico São criados através de Subscription Filters Os filtros são aplicados sobre as propriedades das mensagens (quer as de aplicação, quer as de sistema) Filter FalseFilter sem mensagens TrueFilter todas as mensagens (por omissão) SqlFilter sintaxe SQL92 SqlRuleAction São compostar por filtros e acções As acções usam sintaxe SQL92 para modificar o conjunto de propriedades de uma subscrição. 39

Exemplo string issuer= <obtido do portal> : string key= <obtido do portal> TokenProvider tp= TokenProvider.CreateSharedSecretTokenProvider(issue,key); Uri uri = ServiceBusEnvironment. CreateServiceUri( sb, MyServiceNamespace, string.empty); NameSpaceManager manager= new NameSpaceManager(uri,tP); SqlFilter highmessages = new SqlFilter("MessageNumber > 3"); manager.createsubscription( MyTopic", "HighMessages", highmessages); 40

RuleDescription summerrule = new RuleDescription(){ Action = new SqlRuleAction( SET HavingFun = Yes ), Filter = new SqlFilter( Month = June OR Month = July OR [Month] = August ), Name = SummerRule }; TopicDescription topicdescription = manager.createtopic( WeatherTopic ); manager.createsubscription( WeatherTopic, WeatherSubscription, summerrule); 41