goncalofrocha
goncalofrocha

Reputation: 1

Azure Function Event Hub Output Binding not working when deployed

I am using an Azure Function to get messages from a Rabbit MQ Broker to an Event Hub.

The function works perfect when I run it locally.

Here is the code of the function:

using System.Text;
using System.Dynamic;
using System.Threading.Tasks;
using CaseOnline.Azure.WebJobs.Extensions.Mqtt;
using CaseOnline.Azure.WebJobs.Extensions.Mqtt.Messaging;
using Microsoft.Azure.WebJobs;
using Newtonsoft.Json;
 
public static class Test
{
 
    [FunctionName("EventHubOutput")]
 
    public static async Task Run(
        [MqttTrigger("topic/#")] IMqttMessage message,
        [EventHub("eventhubname", Connection = "EventHubConnectionAppSetting")] IAsyncCollector<string> outputEvents,
        ILogger log)
    {
        var body = message.GetMessage();
        var bodyString = Encoding.UTF8.GetString(body);
        dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(bodyString);
        obj.Topic = message.Topic;
 
        await outputEvents.AddAsync(JsonConvert.SerializeObject(obj));
    }
}

When deployed and run in the Azure portal, I get the following error messages:

Microsoft.Azure.WebJobs.Host.FunctionInvocationException: Exception while executing function: EventHubOutput
---> System.InvalidOperationException: Error while handling parameter outputEvents after function returned:
---> System.Net.Sockets.SocketException (0xFFFDFFFF): Name or service not known
at (...)

Any idea what the problem might be?

Thank you.

Upvotes: 0

Views: 1114

Answers (1)

Harshita Singh
Harshita Singh

Reputation: 4870

You are using the bindings incorrectly. Check out RabbitMQ bindings for Azure Functions overview.

The following example shows a C# function that reads and logs the RabbitMQ message as a RabbitMQ Event:

[FunctionName("RabbitMQTriggerCSharp")]
public static void RabbitMQTrigger_BasicDeliverEventArgs(
    [RabbitMQTrigger("queue", ConnectionStringSetting = "rabbitMQConnectionAppSetting")] BasicDeliverEventArgs args,
    ILogger logger
    )
{
    logger.LogInformation($"C# RabbitMQ queue trigger function processed message: {Encoding.UTF8.GetString(args.Body)}");
}

The following example shows how to read the message as a POCO:

namespace Company.Function
{
    public class TestClass
    {
        public string x { get; set; }
    }

    public class RabbitMQTriggerCSharp{
        [FunctionName("RabbitMQTriggerCSharp")]
        public static void RabbitMQTrigger_BasicDeliverEventArgs(
            [RabbitMQTrigger("queue", ConnectionStringSetting = "rabbitMQConnectionAppSetting")] TestClass pocObj,
            ILogger logger
            )
        {
            logger.LogInformation($"C# RabbitMQ queue trigger function processed message: {pocObj}");
        }
    }
}

I recommend you to check out this complete guide to setup Rabbit MQ Trigger in Azure Functions: RabbitMQ trigger for Azure Functions overview

Upvotes: 1

Related Questions