Messaging SQL の高可用性の構成


解説

Sitecore Messagingライブラリは、接続エラーが発生した場合にSQL データベースへの接続を再試行するように構成できます。Sitecore.Framework.TransientFaultHandlingライブラリは、再試行機能を提供するために使用されます。 接続の再試行の動作を使用するようにMessagingを構成するには、次の手順を実施する必要があります。

リトライヤーの定義

次の例では、データベースへの接続を 10 回再試行した後に失敗する指数リトライヤーを定義しています。

DefaultSqlPolicyRetryerFactoryは、デフォルトでSQL Always OnおよびSQL Azureの一時的なエラーを処理できるリトライヤーを作成します。 CustomErrorCodesセクションの下に、追加のエラー コードを追加できます:

  1. xConnectインスタンスの場合、\App_Data\Config\Sitecore\Messaging\sc.XConnect.TransientFaultHandling.xml および \App_Data\jobs\continuous\AutomationEngine\App_Data\Config\sitecore\Messaging\sc.XConnect.TransientFaultHandling.xml ファイルを次のように変更します(ファイルが存在している場合):
    <Settings>
      <Sitecore>
        <XConnect>
          <Services>
            <TransientFaultHandling>
              <Type>Sitecore.Framework.TransientFaultHandling.RetryerRegistry, Sitecore.Framework.TransientFaultHandling</Type>
              <As>Sitecore.Framework.TransientFaultHandling.IRetryerRegistry, Sitecore.Framework.TransientFaultHandling.Abstractions</As>
              <Options>
                <Retryers>
                  <Messaging.ExponentialRetryer>
                    <Type>Sitecore.Framework.TransientFaultHandling.Sql.DefaultSqlPolicyRetryerFactory, Sitecore.Framework.TransientFaultHandling.Sql</Type>
                    <Options>
                      <CustomErrorCodes>
                        <ConnectionError>19</ConnectionError>
                      </CustomErrorCodes>
                      <ExponentialRetry>
                        <MaxAttempts>10</MaxAttempts>
                        <MinBackoff>00:00:01</MinBackoff>
                        <MaxBackoff>00:00:30</MaxBackoff>
                        <DeltaBackoff>00:00:10</DeltaBackoff>
                      </ExponentialRetry>
                    </Options>
                  </Messaging.ExponentialRetryer>
                </Retryers>
              </Options>
            </TransientFaultHandling>
          </Services>
        </XConnect>
      </Sitecore>
    </Settings>
  2. Sitecore XPインスタンスの\App_Config\Includeフォルダーに、以下の内容を含む新しい構成ファイルを作成します:
    <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
      <sitecore>
        <TransientFaultHandling>
          <Retryers>
            <Messaging.ExponentialRetryer>
              <Type>Sitecore.Framework.TransientFaultHandling.Sql.DefaultSqlPolicyRetryerFactory, Sitecore.Framework.TransientFaultHandling.Sql</Type>
              <Options>
                <CustomErrorCodes>
                  <ConnectionError>19</ConnectionError>
                </CustomErrorCodes>
                <ExponentialRetry>
                  <MaxAttempts>10</MaxAttempts>
                  <MinBackoff>00:00:01</MinBackoff>
                  <MaxBackoff>00:00:30</MaxBackoff>
                  <DeltaBackoff>00:00:10</DeltaBackoff>
    	    </ExponentialRetry>
              </Options>
            </Messaging.ExponentialRetryer>
          </Retryers>
        </TransientFaultHandling>
      </sitecore>
    </configuration>
  3. Sitecore Cortex™ Processing Engineロールの場合:
    1. 次の内容で、\App_Data\jobs\continuous\ProcessingEngine\App_Data\Config\Sitecore\Messagingフォルダー(例えば、sc.Messaging.Retry.xml)に新しい構成ファイルを作成します:
      <Settings>
        <Sitecore>
          <Processing>
            <Services>
              <RetryerRegistry>
                <Options>
                  <Retryers>
                    <ExponentialRetryer>
                      <Type>Sitecore.Framework.TransientFaultHandling.Sql.DefaultSqlPolicyRetryerFactory, Sitecore.Framework.TransientFaultHandling.Sql</Type>
                      <Options>
                        <CustomErrorCodes>
                          <ConnectionError>19</ConnectionError>
                        </CustomErrorCodes>
                        <ExponentialRetry>
                          <MaxAttempts>10</MaxAttempts>
                          <MinBackoff>00:00:01</MinBackoff>
                          <MaxBackoff>00:00:30</MaxBackoff>
                          <DeltaBackoff>00:00:10</DeltaBackoff>
                        </ExponentialRetry>
                      </Options>
                    </ExponentialRetryer>
                  </Retryers>
                </Options>
              </RetryerRegistry>
            </Services>
          </Processing>
        </Sitecore>
      </Settings>
    2. オンプレミスのセットアップの場合は、Processing EngineのWindows サービスを再起動します。

リトライヤーを使用するための Messaging Bus の構成

Messaging BusがTransientFaultHandlingリトライヤーを使用するように構成するには、Messagingトランスポートの構成でリトライヤーを明示的に指定する必要があります。これは、次の構成を使用して実施できます:

  1. Sitecore Cortex Processing Engineロールのリトライヤーを定義します:
    1. \xconnect\App_Data\jobs\continuous\ProcessingEngine\App_Data\Config\Sitecore\Messaging\sc.Processing.Engine.TaskProgress.xmlファイルで、新しい子ノード <RetryerName>sc.Messaging.Retry.xmlファイルで定義されたリトライヤー名で<SqlServer>セクションに追加します:
      <Sitecore.Processing.Engine.Buses.TaskProgressConsumer>
        <Transport>
          <SqlServer>
            <OneWay>false</OneWay>
            <ConnectionStringOrName>messaging</ConnectionStringOrName>
            <TableName>Sitecore_Transport</TableName>
            <InputQueueName>SitecoreProcessingTaskProgressConsumer</InputQueueName>
            <RetryerName>ExponentialRetryer</RetryerName>
          </SqlServer>
        </Transport>
        <Logging Type="Sitecore.Framework.Messaging.Rebus.DotNetLoggerFactory, Sitecore.Framework.Messaging.Rebus" />
      </Sitecore.Processing.Engine.Buses.TaskProgressConsumer>
    2. \xconnect\App_Data\jobs\continuous\ProcessingEngine\App_Data\Config\Sitecore\Messaging\sc.Processing.Engine.TaskRegistration.xmlファイルで、新しい子ノード <RetryerName>sc.Messaging.Retry.xmlファイルで定義されたリトライヤー名で<SqlServer>セクションに追加します:
      <Sitecore.Processing.Engine.Buses.TaskRegistrationConsumer>
        <Transport>
          <SqlServer>
            <OneWay>false</OneWay>
            <ConnectionStringOrName>messaging</ConnectionStringOrName>
            <TableName>Sitecore_Transport</TableName>
            <InputQueueName>SitecoreProcessingTaskRegistrationConsumer</InputQueueName>
            <RetryerName>ExponentialRetryer</RetryerName>
          </SqlServer>
        </Transport>
        <Logging Type="Sitecore.Framework.Messaging.Rebus.DotNetLoggerFactory, Sitecore.Framework.Messaging.Rebus" />
      </Sitecore.Processing.Engine.Buses.TaskRegistrationConsumer>
    3. \xconnect\App_Data\jobs\continuous\ProcessingEngine\App_Data\Config\Sitecore\Messaging\sc.Processing.Engine.TaskStatusBus.xmlファイルで、新しい子ノード <RetryerName>sc.Messaging.Retry.xmlファイルで定義されたリトライヤー名で<Transport>および<Subscriptions>ノードの<SqlServer>セクションに追加します:
      <Sitecore.Processing.Engine.Abstractions.Buses.TaskStatusBus>
        <Transport>
          <SqlServer>
            <OneWay>false</OneWay>
            <!--Set of credentials for proper connection to database-->
            <ConnectionStringOrName>messaging</ConnectionStringOrName>
            <!--The name of the table which holds messages until they are handled-->
            <TableName>Sitecore_Transport</TableName>
            <!--The name of MSMQ queue which publisher uses for publishing message to the bus-->
            <InputQueueName>TaskStatus</InputQueueName>
            <RetryerName>ExponentialRetryer</RetryerName>
          </SqlServer>
        </Transport>
        <Subscriptions>
          <SqlServer>
            <!--Set of credentials for proper connection to database-->
            <ConnectionStringOrName>messaging</ConnectionStringOrName>
            <!--The name of the table which saves the information about the relationships between queues and messages-->
            <TableName>Sitecore_Subscriptions</TableName>
            <!--Means that both subscribers and publishers have access to the same central subscription storage-->
            <IsCentralized>true</IsCentralized>
            <RetryerName>ExponentialRetryer</RetryerName>
          </SqlServer>
        </Subscriptions>
        <Logging Type="Sitecore.Framework.Messaging.Rebus.DotNetLoggerFactory, Sitecore.Framework.Messaging.Rebus" />
      </Sitecore.Processing.Engine.Abstractions.Buses.TaskStatusBus>
    4. オンプレミス デプロイの場合は、Processing EngineのWindows サービスを再起動します(Azureが構成ファイルの変更を自動的に処理します)。

  2. (設定に応じて、)Sitecore XP CMまたはStandaloneロールでSitecore Cortex Processing Engineが適切に動作するようにリトライヤーを定義します。\App_Config\Sitecore\Processing.Tasks.Messaging.Xmgmt\Sitecore.Processing.Tasks.Messaging.config ファイルで、新しい子ノード <RetryerName>sc.Messaging.Retry.xml ファイルで定義されたリトライヤー名で、次のノードの <SqlServer> セクションに追加します: <Sitecore.Processing.Tasks.Messaging.Buses.TaskRegistrationProducer> および <Sitecore.Processing.Tasks.Messaging.Buses.TaskProgressProducer>

    以下は、<Sitecore.Processing.Tasks.Messaging.Buses.TaskRegistrationProducer> ノードの例です:
    <Sitecore.Processing.Tasks.Messaging.Buses.TaskRegistrationProducer>
      <Transport>
        <SqlServer>
          <OneWay>false</OneWay>
          <ConnectionStringOrName>messaging</ConnectionStringOrName>
          <TableName>Sitecore_Transport</TableName>
          <!-- InputQueueName should be unique for CM/CD instance to handle response messages on the correct instance. -->
          <InputQueueName>SitecoreProcessingTaskRegistrationProducer_${MachineName}_${ProcessId}</InputQueueName>
          <RetryerName>ExponentialRetryer</RetryerName>
        </SqlServer>
      </Transport>
      <Routing>
        <TypeBasedMappings>
          <TypeMappings>
            <RegisterDistributedTaskMap>
              <Type>Sitecore.Processing.Engine.Abstractions.Messages.RegisterDistributedTask, Sitecore.Processing.Engine.Abstractions</Type>
              <DestinationQueue>SitecoreProcessingTaskRegistrationConsumer</DestinationQueue>
            </RegisterDistributedTaskMap>
            <RegisterDeferredTaskMap>
              <Type>Sitecore.Processing.Engine.Abstractions.Messages.RegisterDeferredTask, Sitecore.Processing.Engine.Abstractions</Type>
              <DestinationQueue>SitecoreProcessingTaskRegistrationConsumer</DestinationQueue>
            </RegisterDeferredTaskMap>
          </TypeMappings>
        </TypeBasedMappings>
      </Routing>
      <Logging Type="Sitecore.Messaging.SitecoreLoggerFactory,Sitecore.Messaging"/>
    </Sitecore.Processing.Tasks.Messaging.Buses.TaskRegistrationProducer>

リトライヤー使用のためのEXM構成

リトライヤーを使用するようにEXMを構成するには、対応するサーバーのSitecore.EmailExperience.Messaging.configファイルを更新する必要があります。

    1. すべてのCMインスタンスでリトライヤーを定義します。\App_Config\Sitecore\Messaging に移動し、「リトライヤーの定義」セクションに示されているように新しい構成ファイルを作成します。
    2. 全てのCMインスタンスで、すべてのメッセージ バスの /configuration/Sitecore/Messaging/Rebus/[Messaging bus の名前]/Transport/SqlServer ノード配下の <InputQueueName> の後にリトライヤー名を持つ新しい子ノード <RetryerName> を追加することで \App_Config\Sitecore\EmailExperience \Sitecore.EmailExperience.Messaging.config ファイルを更新します:
      • Sitecore.EmailCampaign.Model.Messaging.Buses.AutomatedMessagesBus
      • Sitecore.EmailCampaign.Model.Messaging.Buses.UpdateListSubscriptionMessagesBus
      • Sitecore.EmailCampaign.Model.Messaging.Buses.ConfirmSubscriptionMessagesBus
      • Sitecore.EmailCampaign.Model.Messaging.Buses.EmailOpenMessagesBus
      • Sitecore.EmailCampaign.Model.Messaging.Buses.ClearSuppressionListMessagesBus
      • Sitecore.EmailCampaign.Model.Messaging.Buses.EmailAddressHistoryBus
      • Sitecore.EmailCampaign.Model.Messaging.Buses.SentMessagesBus

      例:

      <Sitecore.EmailCampaign.Model.Messaging.Buses.UpdateListSubscriptionMessagesBus role:require="!DedicatedDispatch">
      <Transport>
        <SqlServer>
          <OneWay role:require="(Standalone or ContentManagement) and !ContentDelivery">false</OneWay>
          <OneWay role:require="ContentDelivery">true</OneWay>
          <ConnectionStringOrName>messaging</ConnectionStringOrName>
          <TableName>Sitecore_Transport</TableName>
          <InputQueueName>UpdateListSubscriptionMessagesQueue</InputQueueName>
          <RetryerName>ExponentialRetryer</RetryerName> 
        </SqlServer>
      </Transport>
      </Sitecore.EmailCampaign.Model.Messaging.Buses.UpdateListSubscriptionMessagesBus>
    3. すべてのDDSインスタンスでリトライヤーを定義します。 \App_Config\Sitecore\Messaging に移動し、「リトライヤーの定義」セクションに示されているように、新しい構成ファイルを作成します。
    4. すべてのDDSインスタンスの \App_Config\Sitecore\EmailExperience\Sitecore.EmailExperience.Messaging.config ファイルに対して 2 番目の手順を繰り返します。
    5. すべてのCDインスタンスでリトライヤーを定義します。 \App_Config\Sitecore\Messaging に移動し、「リトライヤーの定義」セクションに示されているように、新しい構成ファイルを作成します。
    6. すべてのCDインスタンスの \App_Config\Sitecore\EmailExperience\Sitecore.EmailExperience.Messaging.config ファイルに対して 2 番目の手順を繰り返します。
    7. XConnectインスタンスでリトライヤーを定義します。 \yourInstance_collection\App_Data\Config\Messaging に移動し、「リトライヤーの定義」セクションに示されているように、新しい構成ファイルを作成します。
    8. XConnnectインスタンスで、すべてのメッセージ バスの /Settings/Sitecore/XConnect/Services/Messaging/Options/Rebus/[Messaging bus の名前]/Transport/SqlServerノードの配下の<InputQueueName>の後にリトライヤー名を持つ新しい子ノード<RetryerName>を追加して、\yourInstance_collection\App_Data\Config\Sitecore\Messaging\sc.EXM.Messaging.xmlファイルを更新します:
      • Sitecore.EmailCampaign.Model.Messaging.Buses.AutomatedMessagesBus
      • Sitecore.EmailCampaign.Model.Messaging.Buses.ClearSuppressionListMessagesBus

例:

<Sitecore.EmailCampaign.Model.Messaging.Buses.AutomatedMessagesBus>
<Transport>
  <SqlServer>
    <OneWay>true</OneWay>
      <ConnectionStringOrName>messaging</ConnectionStringOrName>
      <TableName>Sitecore_Transport</TableName>
      <InputQueueName>AutomatedMessagesQueue</InputQueueName>
      <RetryerName>ExponentialRetryer</RetryerName>
  </SqlServer>
</Transport>
<Sitecore.EmailCampaign.Model.Messaging.Buses.AutomatedMessagesBus>
  1. \App_Data\jobs\continuous\AutomationEngine\App_Data\Config\sitecore\Messaging\sc.EXM.Messaging.xmlファイルに対して前述の手順を繰り返します。