esquema de mensagem consistência serviço distribuído

O caso de serviços de implantação distribuídos, devido às condições da rede imprevisíveis, é possível enviar a mensagem com êxito, mas o consumidor final ao consumidor falhar, não pode simplesmente não ter enviado a mensagem, como garantir que a mensagem foi enviada problemas com sucesso é frequentemente encontradas. Um estudo recente de pouco tempo, um método específico, como mostrado abaixo:

 

 Tabela estrutura foi concebida como se segue:

 

idéias específicas:

fluxo normal (rede normal)

1. Os produtores de notícias, as informações da mensagem e empresariais dados armazenados no banco de dados na mesma transação.

2. A mensagem enviada, enviar uma mensagem, enviar a tabela de mensagens 'Estado' para 'enviados'

3. O consumidor mensagem, receber uma mensagem, lojas mesa da recepção da mensagem, e chama a produtores de interface, atualizar a tabela produtores de mensagem 'Estado' para 'Concluído'.

extremidades fluxo normal.

 

Processamento de exceção

1. Os produtores de notícias, as informações da mensagem e empresariais dados armazenados no banco de dados na mesma transação.

2. A mensagem enviada, enviar uma mensagem, enviar a tabela de mensagens 'Estado' para 'enviados'

3. Mensagem consumidor não receber a mensagem, ou, receber uma mensagem, a mensagem é armazenada na tabela de recepção, mas a chamada falhou interfaces de produtores.

4. os postos de trabalho que os produtores de mensagens job1, o envio de uma tabela de mensagens de consulta 'Estado' para 'enviados', eo tempo atual excede o prazo de retorno de chamada (ou tempo de expiração) é gravado, em seguida, status da chamada Interfaces mensagem de consulta de consumo

5. Se os produtores de mensagens job1 encontrados nos resultados, tabela de mensagens do update 'Estado' para 'Concluído', as extremidades do processo e, se ele é encontrado nos resultados, a atualização mensagem mesa 'Status' 'não é enviada'

6. produtores de mensagens job2, o envio de uma tabela de mensagens de consulta 'Estado' para 'apos não enviadas mensagem gravada produzido novamente, e atualiza o status é 'transmissão.' Após 3 irá saltar automaticamente a fluir até que o status é alterado para "concluída".

 

Note-se que campo tabela da recepção da mensagem sourcemsg_id requer um idempotent única assegurar.

 

Para este projeto, completou um core3.1 net demo, e passou RabbitMQ como filas de mensagens, o MySQL como banco de dados, ORM núcleo ef, Redis distribuído bloqueio.

endereço demonstração https://github.com/cysnet/mq-trans.git

Acho que você gosta

Origin www.cnblogs.com/chenyishi/p/12586512.html
Recomendado
Clasificación