.NET Núcleo desenvolvimento combate real (Lição 33: Integração Evento: uso RabbitMQ para alcançar EventBus) - Notas de Estudo (a)

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!

Creative Commons License

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]).

Acho que você gosta

Origin www.cnblogs.com/MingsonZheng/p/12578716.html
Recomendado
Clasificación