33 | eventos de integração: o uso RabbitMQ para alcançar EventBus
Nesta seção, vamos explicar como conseguir EventBus por componentes da PAC e RabbitMQ
Para alcançar EventBus, estamos aqui para ajudar o RabbitMQ, é toda a instalação e utilização da experiência é muito humano, se for desenvolvida sob o Windows, então ele pode ter um instalador do Windows, você também pode instalar e usar em outros sistemas operacionais explicação, é claro, ele também suporta modelo Docker, podemos obter com os métodos do pacote de instalação e instalação no seguinte endereço
https://www.rabbitmq.com/download.html
Outro é o mais bem conhecido na comunidade do framework .NET núcleo de CAP que foi desenvolvido por nosso povo, ele percebeu seus EventBus fora da caixa, podemos simplesmente RabbitMQ configure será capaz de integrar, e nós conseguimos eventos de integração de processos
https://github.com/dotnetcore/CAP
Vamos olhar o quadro da implementação da arquitetura PAC
É realmente implementa um padrão de projeto chamado OutBox está em cada um de nossos micro-serviços, como banco de dados de micro-serviços A Um, neste banco de dados interno criou duas mesas, uma mesa e um evento chamado publicar chamada tabela de eventos receptor, tabela de eventos para gravar estes dois serviços e eventos a emitir micro-micro do serviço recebido um
Quando queremos enviar evento, que irá armazenar a lógica de eventos com a nossa lógica de negócios da operação de fusão, apresentado na mesma transação, os meios que quando a nossa lógica de negócios submetidos com sucesso, nosso evento dentro da tabela de evento deve existir, é nossa lógica de negócios forte da transação está ligada
Se a nossa lógica de negócio falhar, a transação é revertida, e este evento seja o nosso evento não aparecerá na tabela, para que a criança pode fazer dizemos que o evento deve ser enviado deve estar em consonância com a lógica de negócios
Seguido por nossos componentes responsáveis para todos os eventos da tabela de eventos enviados para EventBus, como a fila de mensagens RabbitMQ para ir para dentro, pelo destinatário para se inscrever
Para o evento de assinatura, então padrão de design é a mesma razão, quando o nosso aplicativo para obter informações na fila de mensagens quando será mensagens persistentes a Receber tabela de eventos de nosso banco de dados, para que possamos localmente manipulação de eventos, repetição de falha e outras operações, que são feitas pelo quadro da PAC, só precisa fazer uma configuração simples, publicar e assinar atenção a lógica de negócios
Nós olhamos para o código, arquitetura CAP acabamos de mencionar, o ponto chave é armazenada com os nossos eventos necessários lógica de negócios na mesma transação em, de modo que na parte lógica de processamento de transações, então, necessidade de parte incorporar o código da CAP, olharmos para a definição de EFContext
public EFContext(DbContextOptions options, IMediator mediator, ICapPublisher capBus) : base(options)
{
_mediator = mediator;
_capBus = capBus;
}
Antes de haver a preocupação de que existe um lugar chamado ICapPublisher para este parâmetro, a chave é esta linha de código que precisamos de olhar para
_currentTransaction = Database.BeginTransaction(_capBus, autoCommit: false);
Papel desta linha de código é a criação de uma transação, podemos ver o processo de criação de uma transação, nós também ICapPublisher passado ao construtor deste método, de fato, este método é fornecido por um componente da PAC, a sua função principal é quando o evento queremos enviar o nosso negócio de armazenamento estão nos mesmos assuntos internos, desta forma podemos de modo que quando uma transação é confirmada ou revertida, os nossos eventos e acesso a lógica do negócio é consistente
Então, olhamos para a parte da configuração, escrito abaixo em ServiceCollectionExtensions
public static IServiceCollection AddEventBus(this IServiceCollection services, IConfiguration configuration)
{
services.AddTransient<ISubscriberService, SubscriberService>();
services.AddCap(options =>
{
options.UseEntityFramework<DomainContext>();
options.UseRabbitMQ(options =>
{
configuration.GetSection("RabbitMQ").Bind(options);
});
//options.UseDashboard();
});
return services;
}
Aqui definimos um AddEventBus, você pode ver uma demonstração do nosso serviço de assinatura antes do código é injetado dentro, e, em seguida, o foco da maioria dos serviços de código é AddCap, precisamos dizer ao quadro da PAC para DomainContext quisermos alcançar nossos EventBus, share EventBus DomainContext com a gente conexão com o banco, a seguinte linha de meios de armazenamento de código como usamos a nossa fila de mensagens EventBus RabbitMQ, onde você pode ver o uso do método de ligação de um ligamento nossas opções de configuração para ir acima RabbitMQ
Podemos olhar para a nossa configuração
"RabbitMQ": {
"HostName": "localhost",
"UserName": "admin",
"Password": "123456",
"VirtualHost": "geektime",
"ExchangeName": "geek_queue"
}
Aqui você pode ver que nós definimos a configuração de um RabbitMQ, e em seguida, haverá o nosso anfitrião, porque ele é instalado localmente, de modo que o endereço de acesso é localhost, VirtualHost RabbitMQ é uma configuração especial, é o papel da separação espacial entre RabbitMQ um espaço diferente, você pode pensar que é um inquilino, a mesma VirtualHost, todos nós pode ser considerado um cluster RabbitMQ, inferior ExchangeName é o nome da fila para se inscrever à Bolsa, publicar e assinar mensagens é através da troca ao
Em seguida, adicione uma linha aqui no arranque
services.AddEventBus(Configuration);
Então, nós estamos perdidos!
Este trabalho é Creative Commons Attribution - Contrato de Licença ShareAlike 4.0 International - Não comercial para o licenciamento.
Bem-vindo a reimpressão, uso, repost, mas não se esqueça de manter o artigo assinado por Zheng Ziming (contendo links: http://www.cnblogs.com/MingsonZheng/ ), não devem ser utilizados para fins comerciais, não se esqueça de publicar o mesmo trabalho com base na modificação licença de papel .
Se você tiver alguma dúvida, entre em contato comigo ([email protected]).