Beispiel #1
0
        private EventhubConnection(
            string eventhubNamespace,
            string eventHubName,
            string sharedAccessKeyName,
            string sharedAccessKey,
            string consumerGroupName,
            string listenerName,
            string listenerVersion,
            Func <EventMessage, Task> onMessage,
            Func <Exception, Task> onError = null)
        {
            ListenerName    = listenerName;
            ListenerVersion = listenerVersion;
            var endpoint = string.Format(EventhubUriTemplate, eventhubNamespace);
            var receiverConnectionStringBuilder = new ServiceBusConnectionStringBuilder(endpoint, $"{eventHubName}/ConsumerGroups/{consumerGroupName}/Partitions/1", sharedAccessKeyName, sharedAccessKey);
            var receiver = new MessageReceiver(receiverConnectionStringBuilder, ReceiveMode.ReceiveAndDelete);

            receiver.RegisterMessageHandler(async(message, cancellationToken) =>
            {
                try
                {
                    var eventMessage = EventMessage.Convert(message);
                    switch (eventMessage.EventName)
                    {
                    case EventNames.STATUS_REQUEST:
                        await SendStatusMessage();
                        break;
                    }
                    await onMessage(eventMessage);
                }
                catch (InvalidEventConversion e)
                {
                    if (onError != null)
                    {
                        await onError(e);
                    }
                }
            },
                                            new MessageHandlerOptions((exceptions) =>
            {
                Console.WriteLine($"Error received: {exceptions.Exception.Message}");
                return(Task.FromResult <object>(null));
            }));
            var senderConnectionStringBuilder = new ServiceBusConnectionStringBuilder(endpoint, $"{eventHubName}/Partitions/1", sharedAccessKeyName, sharedAccessKey);

            eventhubSender = new MessageSender(senderConnectionStringBuilder);
            SendOnlineMessage().GetAwaiter().GetResult();
        }