Verwendung von ActiveMQ mit Optimizely 12 « Episerver « Mathias Kuntos Blog

Während die Einrichtung von Optimizely 12 für die Arbeit mit RabbitMQ ziemlich einfach ist, erfordert die Verwendung von ActiveMQ für den Transport stattdessen etwas mehr Konfiguration unsererseits. Hier ist ein kurzer Artikel darüber, wie Sie Optimizely 12 für die Verwendung von MassTransit (EPiServer.Events.MassTransit) mit ActiveMQ einrichten.

Eine kurze Anleitung zum Einrichten eines lokalen ActiveMQ-Servers finden Sie in Muthu Kumarans Artikel How to use ActiveMQ in C#.

Die Einrichtung von Optimizely zur Verwendung von ActiveMQ erfordert einige Einstellungen. Hier ist ein Beispiel dafür, was Sie Ihrer appsettings.Development.json hinzufügen können. Da Optimizely die benötigten Warteschlangen und Themen automatisch einrichtet, benötigt es dazu die Erlaubnis. Der standardmäßige Administratorbenutzer kann für einen lokalen Test ausreichen, aber abhängig von Ihrer Risikobewertung möchten Sie möglicherweise einschränken, was der Benutzer, den Sie in anderen Umgebungen verwenden, tun kann.

{
  "ActiveMQ": {
    "Port": 61616,
    "Host": "localhost",
    "Username": "admin",
    "Password": "admin",
    "ExchangeName": "VirtualTopic.EPiServer.Events.EventMessage",
    "PrefetchCount": 100,
    "Enabled": true
  },

Um die Startdatei übersichtlicher zu gestalten, haben Sie wahrscheinlich bereits eine Art Erweiterungsdatei zum Aufteilen Ihrer Initialisierung. Hier ist der ActiveMQ-bezogene Code, wie einer in Bezug auf Optimizely aussehen könnte.

Genauso wie die angebotenen KaninchenMqTransport hinzufügen Methode müssen wir unsere eigene erstellen AddActiveMqTransport und verwenden Sie es beim Einrichten des Nahverkehrsereignisanbieters.

public static class OptimizelyExtensions
{
  public static IServiceCollection ConfigureOptimizely(this IServiceCollection services, IConfiguration configuration)
  {
    // ...

    if (bool.Parse(configuration.GetSection("ActiveMQ:Enabled").Value))
    {
      _ = services.AddMassTransitEventProvider(null, x => x.AddActiveMqTransport(configuration));
    }

    // ...

    return services;
  }

Die AddActiveMqTransport-Methode verwendet die Konfiguration, um sowohl das Produzieren als auch das Konsumieren von Nachrichten hinzuzufügen und zu konfigurieren. Natürlich können Sie hier bei Bedarf Änderungen und Ergänzungen vornehmen.

  private static void AddActiveMqTransport(this IBusRegistrationConfigurator busRegistrationConfigurator, IConfiguration configuration)
  {
    _ = busRegistrationConfigurator.AddConsumer();

    busRegistrationConfigurator.UsingActiveMq(delegate (IBusRegistrationContext context, IActiveMqBusFactoryConfigurator cfg)
    {
      string host = configuration.GetSection($"ActiveMQ:Host").Value;
      int port = int.Parse(configuration.GetSection($"ActiveMQ:Port").Value, CultureInfo.InvariantCulture);
      string username = configuration.GetSection($"ActiveMQ:Username").Value;
      string password = configuration.GetSection($"ActiveMQ:Password").Value;
      string exchangeName = configuration.GetSection($"ActiveMQ:ExchangeName").Value;
      int prefetchCount = int.Parse(configuration.GetSection($"ActiveMQ:PrefetchCount").Value, CultureInfo.InvariantCulture);

      cfg.Host(host, port, h =>
      {
        h.Username(username);
        h.Password(password);
      });
      cfg.Message(delegate (IMessageTopologyConfigurator x)
      {
        x.SetEntityName(exchangeName);
      });
      cfg.PublishTopology.VirtualTopicPrefix = string.Empty;
      cfg.ReceiveEndpoint(new TemporaryEndpointDefinition(tag: null, concurrentMessageLimit: null, prefetchCount), delegate (IActiveMqReceiveEndpointConfigurator e)
      {
        e.Consumer(() => context.GetService());
        e.UseDataContractBinarySerializer(context.GetService());
        e.AutoDelete = true;
        e.PrefetchCount = prefetchCount;
        e.Durable = false;
        e.Bind(exchangeName, delegate (ITopicBindingConfigurator x)
        {
          x.Durable = true;
          x.AutoDelete = false;
        });
        e.ConfigureConsumer(context);
      });
    });
  }
}

Und zum Schluss noch ein kurzes Beispiel, wie Sie die obige Erweiterungsmethode in Ihrer Startup-Klasse verwenden können.

public class Startup
{
  private readonly IConfiguration _configuration;

  public Startup(IConfiguration configuration)
  {
    _configuration = configuration;
  }

  public void ConfigureServices(IServiceCollection services)
  {
    // ...
    _ = services.ConfigureOptimizely(_configuration);

Eine einfache Möglichkeit, dies zu versuchen, besteht darin, einfach zwei URLs zu derselben Optimizely 12-Website lokal einzurichten und sie auf den ActiveMQ-Server zu verweisen. Sie können dann Änderungen auf einer der Websites veröffentlichen und sehen, dass die Änderung sofort auf der anderen angezeigt wird. Wenn Sie sich bei der ActiveMQ-Schnittstelle anmelden, können Sie auch die Nachrichten sehen, die von Ihren beiden Websites gesendet und verarbeitet werden.

Lesen Sie auch  [Hinweis]Für Kunden aus dem Europäischen Wirtschaftsraum (EWR) und dem Vereinigten Königreich – Yahoo! JAPAN

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.