Imaginem a seguinte situação: um servidor que irá precisar processar dados vindos de diversos clientes ao mesmo tempo, ou seja, um típico servidor multithread. Basicamente ele irá precisar cumprir as seguintes etapas em seu ciclo de processamento:
Etapa1: Aceitar o pedido de conexão de um determinado cliente.
Etapa2: Receber os dados deste cliente e criar uma lista de campos.
Etapa3: Processar esta lista de campos de acordo com os dados nela contido, ou seja, vários profiles de processamento.
Etapa4: Enviar ao cliente os dados processados.
Em todas as etapas irão ocorrer eventos de I/O, então é um típico caso para se colocar as etapas em threads, certo?
Buscando informações sobre este tipo de problema, encontrei muitas referências falando do padrão de arquitetura/design chamado de “Pipes and Filters”. Ainda não estudei muito sobre este padrão, mas a princípio me parece ser uma ótima referência de como resolver este problema.
Qual a opinião de vocês, indicam esta arquitetura/design ou existem outras maneiras mais elegantes de resolver este problema?
Não sei muito sobre JMS, mas para trabalhar com esta API não seria necessário que tanto o cliente como o servidor a utilizassem? Se for necessário, então fica inviável a sua utilização, pois precisarei atender solicitações de clientes heterogêneos, ou seja, escritos em outras linguagens.
[quote=Henrique Mota Esteves]Imaginem a seguinte situação: um servidor que irá precisar processar dados vindos de diversos clientes ao mesmo tempo, ou seja, um típico servidor multithread. Basicamente ele irá precisar cumprir as seguintes etapas em seu ciclo de processamento:
Etapa1: Aceitar o pedido de conexão de um determinado cliente.
Etapa2: Receber os dados deste cliente e criar uma lista de campos.
Etapa3: Processar esta lista de campos de acordo com os dados nela contido, ou seja, vários profiles de processamento.
Etapa4: Enviar ao cliente os dados processados.
Em todas as etapas irão ocorrer eventos de I/O, então é um típico caso para se colocar as etapas em threads, certo?
Buscando informações sobre este tipo de problema, encontrei muitas referências falando do padrão de arquitetura/design chamado de “Pipes and Filters”. Ainda não estudei muito sobre este padrão, mas a princípio me parece ser uma ótima referência de como resolver este problema.
Qual a opinião de vocês, indicam esta arquitetura/design ou existem outras maneiras mais elegantes de resolver este problema?[/quote]
Pipes e Filters são patterns comuns para quem trabalha com integração de sistemas. Se vc está integrando sistemas, está no caminho certo. Se os consumidores e produtores forem dos mais variados tipos e dos mais variados protocolos, melhor começar a pensar em usar um ESB.