#azure #azure-eventgrid
#azure #azure-eventgrid
Вопрос:
Я использую Azure.Обмен сообщениями.EventGrid версии 4.0.0-beta.4 для публикации событий в разделе сетки событий.
Я думаю, что у меня правильно настроен клиент, и я вызываю правильный метод для публикации событий, но я получил это исключение:
Azure.RequestFailedException: 'Service request failed.
Status: 400 (Unexpected property 'source' found in JSON. Expected:
StartObject, actual: StartArray)
Вот мой код, основанный на приведенных здесь примерах:
Uri endpoint = new Uri("myEndpoint");
string accessKey = "myAccessKey";
string topicName = "MyTopic1";
EventGridPublisherClient client = new EventGridPublisherClient(
endpoint,
new AzureKeyCredential(accessKey));
MyCustomObj obj = new MyCustomObj() {
Description = "Test description",
Name = "Test name",
Id = 1234};
List<EventGridEvent> eventsList = new List<EventGridEvent>
{
new EventGridEvent(
obj,
"myCustomObject",
"myEventType",
"v1"
)
};
await client.SendEventsAsync(eventsList);
Ответ №1:
Я разобрался с проблемой. Оказывается , я должен публиковать CloudEvent
вместо EventGridEvent
. Потратив много времени на Azure Portal, я обнаружил, что тема, которую я пытаюсь опубликовать, принимает только CloudEvent
. Поиск этой информации занял много времени, потому что она очень скрыта. Но вот как я это нашел:
Когда вы находитесь на вкладке Обзор, прямо над ней есть ссылка «Представление в формате Json», где вы найдете «Конечная точка темы».:
Нажмите на нее и выберите последнюю версию API. Здесь это говорит мне inputSchema
о том, что CloudEventSchemaV1_0
:
После изменения типа события я смог опубликовать событие:
List<CloudEvent> eventsList = new List<CloudEvent>
{
new CloudEvent(
"localhost",
"myEventType",
obj
)
};
await client.SendEventsAsync(eventsList);
Это не должно было вызвать столько проблем…
В любом случае… Побочный момент, который меня все еще смущает, — это почему атрибуты CloudEvent
отличаются от EventGridEvent
атрибутов ? Кроме того, у одного есть атрибут версии данных, а у другого его нет. Как мне выбрать, что использовать?