Pergunta

Já me perguntaram pelo meu chefe de equipa para investigar MSMQ como uma opção para a nova versão do nosso produto. Nós usamos o SQL Service Broker em nossa versão atual. Eu fiz o meu quinhão de experimentação e pesquisando para descobrir qual produto é melhor para minhas necessidades, mas eu pensei que eu ia perguntar o melhor site que eu sei com respostas de programação.

Alguns detalhes:

  • O nosso cliente é .NET 1.1 e 2.0 do código; este é o lugar onde a mensagem será enviada.
  • O alvo em uma instância do SQL Server 2005. Todas as mensagens acabam sendo atualizações de banco de dados ou inserções.
  • Iremos enviar várias atualizações que devem ser tratados como uma transação.
  • Nós temos que ter capacidade de recuperação mensagem perfeita; nenhuma mensagem pode ser perdida.
  • Temos que ser assíncrona e capaz de aceitar mensagens mesmo quando o servidor de destino SQL é baixo.
  • desenvolver a nossa própria solução de filas não é uma opção; nós somos uma equipe pequena.

As coisas que eu descobri até agora:

  • Ambos MSMQ e SQL Service Broker pode fazer o trabalho.
  • Ao que parece, corretor de serviço é mais rápido para mensagens transacionais.
  • Service Broker requer um servidor SQL em execução em algum lugar, enquanto MSMQ precisa de qualquer máquina em algum lugar com o Windows configurado.
  • MSMQ parece ser melhor / mais rápido / mais fácil de configurar / executado em clusters.

Estou faltando alguma coisa? Existe um vencedor claro aqui? Quaisquer pensamentos, experiências, ou links seria avaliado. Obrigado!

EDIT: Nós acabou furando com corretor de serviço porque temos uma estrutura DB personalizado usado em alguns dos nosso código de cliente (que lidar com transações melhor). Esse código capturado SQL para transações, mas não. O código do cliente também foi toda a versão 1.1 do .NET, então nós teríamos que atualizar todo o código do cliente. Obrigado pela sua ajuda!

Foi útil?

Solução

Tendo acabado migrou minha aplicação de Service Broker para MSMQ, eu teria de voto para a utilização de MSMQ. Há vários factores a ter em conta, mas a maioria dos quais tem a ver com como você está usando seus dados e onde as vidas de processamento.

  • Se o processamento é feito no banco de dados? Service Broker
  • Se é mover os dados apenas? Service Broker
  • é o processamento feito em .NET / COM código? MSMQ
  • Você precisa de transações distribuídas remoto (por exemplo, o processamento em uma diferente caixa de SQL)? MSMQ
  • Você precisa ser capaz de enviar mensagens enquanto o destino é baixo? MSMQ
  • Você quer usar NServiceBus, MassTransit, Rhino-ESB, etc.? MSMQ

As coisas a considerar, não importa o que você escolhe

  • Como você sabe que a saúde de sua fila? Ambas as opções lidar com failover de forma diferente. Por exemplo Service Broker irá desativar sua fila em determinados cenários que podem derrubar a sua aplicação.
  • Como vai você executo informando? Se você já usa tabelas SQL em seus relatórios, Service Broker pode facilmente caber em como é apenas outra tabela dinâmica. Se você já estiver usando Performance Monitor MSMQ pode caber em mais agradável. Service Broker tem um monte de contadores de desempenho, por isso não deixe que este seja o seu único fator.
  • Como você mede o tempo de atividade? É apenas certificando-se de que você não perder transações, ou que você precisa para responder de forma síncrona? Acho que a natureza distribuída da MSMQ permite maior tempo de atividade porque a fila principal pode ir off-line e não algo perder. Considerando que, com Service Broker seu banco de dados deve estar online ou então você perder.
  • Você já tem experiência com uma dessas tecnologias? Ambos têm um monte de detalhes de implementação que podem voltar e mordê-lo.
  • Não importa o que escolha que você faz, como é fácil de mudar a tecnologia de enfileiramento subjacente? Eu recomendo ter uma interface IQueue genérico que você escrever uma aplicação concreta contra. Desta forma, a escolha que você faz pode ser facilmente alterado mais tarde, se você achar que você fez o errado. Afinal, uma fila é apenas uma fila e não deve trancá-lo em uma implementação específica.

Outras dicas

Eu usei MSMQ antes e o único item que eu adicionar à sua lista é um cheque pré-requisito para o controle de versão. Corri para um problema onde um site tinha Win 2000 Server e, portanto, v.2 MSMQ, contra Win 2003 Server e MSMQ v3. Todo o meu código .NET alvo v.3 e eles não são compatíveis ... ou pelo menos não facilmente assim.

Apenas uma consideração se você vai a rota MSMQ.

A limitação de tamanho de mensagem no MSMQ suspendeu minha escavação nessa direção. Estou aprendendo Service Broker para o projeto.

Você precisa ser capaz de enviar mensagens enquanto o destino é baixo? MSMQ

Eu não entendo por quê? SSB pode enviar mensagens para o destino desconectado, sem qualquer problema. Todas estas mensagens vão para a fila de transmissão e seria entregue ao destino estadia acessível.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top