0

Azure で nodejs を使用して eventhub にコンシューマ グループを作成する方法は?

.net SDK が提供するものを複製しようとしましたが、うまくいきませんでした。

const { NamespaceManager } = require("@azure/service-bus");                                                                                                   
let namespaceManager = NamespaceManager.CreateFromConnectionString(eventHubConnectionString);                                                                 
let ehd = namespaceManager.GetEventHub(eventHubPath);                                                                                                         
namespaceManager.CreateConsumerGroupIfNotExists(ehd.Path, consumerGroupName);
4

2 に答える 2

1

機能したプロセスは次のとおりです。

https://docs.microsoft.com/en-us/rest/api/eventhub/create-consumer-group

手順:

  1. SAS トークンの作成
  2. 適切なヘッダーを指定し、REST API への https 呼び出しを行います
  3. 作成できるのは 1 回だけです。2 回目に呼び出すと、409 エラーがスローされます。更新または挿入呼び出しが必要な場合は、それを確認する必要があります。

SAS トークン:

https://docs.microsoft.com/en-us/rest/api/eventhub/generate-sas-token

uri -- eventhub の URL saName -- 管理ポリシーの名前 saKey -- EventHub 管理ポリシーのプライマリ/セカンダリ キー (Manage があることを確認してください)

function createSharedAccessToken(uri, saName, saKey) { 
    if (!uri || !saName || !saKey) { 
            throw "Missing required parameter"; 
        } 
    var encoded = encodeURIComponent(uri); 
    var now = new Date(); 
    var week = 60*60*24*7;
    var ttl = Math.round(now.getTime() / 1000) + week;
    var signature = encoded + '\n' + ttl; 
    var signatureUTF8 = utf8.encode(signature); 
    var hash = crypto.createHmac('sha256', saKey).update(signatureUTF8).digest('base64'); 
    return 'SharedAccessSignature sr=' + encoded + '&sig=' +  
        encodeURIComponent(hash) + '&se=' + ttl + '&skn=' + saName; 
}

リクエスト パラメータ:

URL:

https://your-namespace.servicebus.windows.net/your-event-hub/consumergroups/testCG?timeout=60&api-version=2014-01

ヘッダー:

Content-Type: application/atom+xml;type=entry;charset=utf-8
Host: your-namespace.servicebus.windows.net
Authorization: {replace with the content from your SAS Token}

ペイロード:

<entry xmlns="http://www.w3.org/2005/Atom">  
   <content type="application/xml">  
      <ConsumerGroupDescription xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">Any name you want</ConsumerGroupDescription>  
   </content>  
</entry>

可能な返品ステータス:

201 -- Successful Creation
404 -- Not found, you are using a name that does not exist
409 -- The messaging entity 'XXX' already exists.

他の問題に気付いた場合は、コメントを残してください。

于 2019-12-31T19:44:59.540 に答える