0

2つのキューがあり、さらに多くのキューがあります...外部アクティベーターを使用してこれらのキューを外部でアクティブにしたいです。

EAService.configを編集してqueue#1をアクティブ化すると、正常に機能します。
EAService.configを編集してqueue#2をアクティブ化すると、正常に機能します。

両方を構成に入れると、最初にリストされているものだけがアクティブになります。

両方のキューは実際には同じexeファイルによって処理されています...そして機能しない例はこれです...

<NotificationServiceList>
    <NotificationService name="my_notif_svc1" id="100" enabled="true">
      <Description>my notification service 1</Description>
      <ConnectionString>
        <Unencrypted>server=my_pc01;database=my_db;Application Name=External Activator;Integrated Security=true;</Unencrypted>
      </ConnectionString>
    </NotificationService>
    <NotificationService name="my_notif_svc2" id="100" enabled="true">
      <Description>my notification service 2</Description>
      <ConnectionString>
        <Unencrypted>server=my_pc01;database=my_db;Application Name=External Activator;Integrated Security=true;</Unencrypted>
      </ConnectionString>
    </NotificationService>
  </NotificationServiceList>
  <ApplicationServiceList>
    <ApplicationService name="myMessageApp1" enabled="true">
      <OnNotification>
        <ServerName>my_pc01</ServerName>
        <DatabaseName>my_db</DatabaseName>
        <SchemaName>dbo</SchemaName>
        <QueueName>my_user_queue1</QueueName>
      </OnNotification>
      <LaunchInfo>
        <ImagePath>c:\test\myMessageReceiver.exe</ImagePath>
        <CmdLineArgs>whatever cmd-line arguments you need to pass to your receiver application</CmdLineArgs>
        <WorkDir>c:\test</WorkDir>
      </LaunchInfo>
      <Concurrency min="1" max="4" />
    </ApplicationService>
    <ApplicationService name="myMessageApp2" enabled="true">
      <OnNotification>
        <ServerName>my_pc01</ServerName>
        <DatabaseName>my_db</DatabaseName>
        <SchemaName>dbo</SchemaName>
        <QueueName>my_user_queue2</QueueName>
      </OnNotification>
      <LaunchInfo>
        <ImagePath>c:\test\myMessageReceiver.exe</ImagePath>
        <CmdLineArgs>whatever cmd-line arguments you need to pass to your receiver application</CmdLineArgs>
        <WorkDir>c:\test</WorkDir>
      </LaunchInfo>
      <Concurrency min="1" max="4" />
    </ApplicationService>
  </ApplicationServiceList>

さらに、id = "100"が何をしているのかわかりません...同じ#と異なる#...つまり100と101を試してみましたが、違いはありませんでした。アクティベーターサービスは、「ApplicationServiceList」にリストされている最初のサービスに対してのみ機能します

ヘルプ!

4

2 に答える 2

1

私は自分の問題を理解しました...

ドキュメントから

システムは、複数のServiceBrokerアプリケーションキューに外部アクティベーションを使用できます。アプリケーションキューとアクティベーション通知サービスの間には、多対1の関係があります。アクティベーション通知サービスと外部アクティベーションサービスの間には1対1の関係があります。

私は上記の2つの通知サービス(my_notif_svc1とmy_notif_svc2)でした。同じ「TOSERVICE」を利用するようにイベント通知(イベント通知の作成...)を切り替えましたが、動作するようになりました。

したがって、外部アクティベータに1つの「サービス」を利用する必要がありますが、そのサービスを指す複数のキューに対して複数のイベント通知を作成できます。

私はまだそれを設定した方法が機能するはずだと思いますが、これは間違いなく機能します...

于 2011-02-21T18:30:41.880 に答える
0

私もこの同じ問題に遭遇しました。リストの最初のサービスだけでなく、SSBEAにリストされている複数の通知サービスを尊重する理由とその理由について、Microsoftから公式の回答を得るとよいでしょう。最後に、同じソリューションを使用しました。これは、GUIDを動的に取得し、キューのアクティブ化イベントをSINGLEサービス(ServiceBrokerNotification.NotificationService)に設定するために使用する便利なスニペットです。

DECLARE @sbn nvarchar(100) = 'servicebrokernotification'
DECLARE @sbnid nvarchar(60)

SELECT @sbnid = ''''+CAST(service_broker_guid AS nvarchar(60))+'''' FROM sys.databases WHERE name = @sbn SELECT @sbnid

DECLARE @Str nvarchar(max) DECLARE @createEventSql nvarchar(max)

Set @Str = 'CREATE EVENT NOTIFICATION NotificationEvent ON QUEUE [TargetQueue] FOR QUEUE_ACTIVATION TO SERVICE ''NotificationService'' ,' + @sbnid;

Select @Str EXECUTE (@Str)

于 2011-04-22T20:31:59.700 に答える