无法通过事件中心在Azure流分析上收到输入

时间:2018-12-09 14:51:40

标签: c# azure azure-eventhub azure-stream-analytics

我试图使用事件中心将消息发送到Azure流分析。在Azure上,我可以在监视器上清楚地看到“事件”活动,但是在Stream Analytics Job上,我只是无法测试输入数据。

我尝试仅测试一个文件,但我的json文件可以正常工作。在我用来发送消息的C#代码下面:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.IO;
using Newtonsoft.Json;
using Microsoft.Azure.EventHubs;

namespace contosorealtimeapplication

{

public class Program
{
    private static Microsoft.Azure.EventHubs.EventHubClient eventHubClient;
    private const string EventHubConnectionString = "Endpoint=sb://***************.servicebus.windows.net/;SharedAccessKeyName=***************;SharedAccessKey=***************";
    private const string EventHubName = "contosorealtime";

    public static void Main(string[] args)
    {
        MainAsync(args).GetAwaiter().GetResult();
    }

    private static async Task MainAsync(string[] args)
    {
        var connectionStringBuilder = new EventHubsConnectionStringBuilder(EventHubConnectionString)
        {
            EntityPath = EventHubName
        };

        eventHubClient = Microsoft.Azure.EventHubs.EventHubClient.CreateFromConnectionString(connectionStringBuilder.ToString());

        await SendMessagesToEventHub();
        await eventHubClient.CloseAsync();

        Console.WriteLine("Press ENTER to exit.");
        Console.ReadLine();
    }

    // Creates an event hub client and sends 100 messages to the event hub.
    private static async Task SendMessagesToEventHub()
    {
        //get JSON file configured on app-setting
        string localFolder = ConfigurationManager.AppSettings["sourcefolder"];
        string[] fileEntries = Directory.GetFiles(localFolder);
        string message = "";
        string serialisedString = "";

        foreach (string filePath in fileEntries)
        {

            try
            {
                serialisedString = JsonConvert.SerializeObject(filePath);
                message = $"Message {serialisedString}";
                Console.WriteLine($"Sending message: {message}");
                await eventHubClient.SendAsync(new Microsoft.Azure.EventHubs.EventData(Encoding.UTF8.GetBytes(serialisedString)));

            }
            catch (Exception exception)
            {
                Console.WriteLine($"{DateTime.Now} > Exception: {exception.Message}");
            }
        }
    }
}

}

我100%确定它缺少分区键,但是我找不到正确传递它的方法。

我从这个例子中得到了这个例子:https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-dotnet-standard-getstarted-send

在“事件中心”活动下:

Event Hub Activity

以下是输入详细信息:

Input Configuration:

以下是我尝试从输入中上传示例数据时收到的Azure流分析作业消息:

Azure error message

这是我从文件(json文件)上传数据时的结果:

Result data from file

有人知道如何解决吗?

PS。杰森工作正常。

1 个答案:

答案 0 :(得分:0)

我假设您选择输入数据格式为json。在示例代码中,您正在发送字符串作为事件中心有效负载。 ASA仅支持对象数组或空格分隔的对象。如果文件名是您唯一感兴趣的字段,请将其作为json对象发送-类似{ "fileName": "value"}