Show Configuration
A bus instance is composed of many classes, all of which are wired together to form a connection pipeline of message processing goodness. This brings a bit of complexity, as there are many moving parts behind the curtain. To help troubleshoot and understand how a bus is configured, it is possible to probe the bus and return an object graph of the bus.
To probe bus configuration, use the GetProbeResult
method as shown below.
var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
cfg.Host("rabbitmq://localhost/test");
sbc.ReceiveEndpoint("input_queue", ec =>
{
ec.Consumer<UpdateCustomerAddressConsumer>();
})
});
ProbeResult result = busControl.GetProbeResult();
Console.WriteLine(result.ToJsonString());
The resulting output for the configuration above would be similar to the following.
{
"resultId": "7f280000-2961-000c-1dcc-08d2c68a08ac",
"probeId": "7f280000-2961-000c-fd27-08d2c68a08ab",
"startTimestamp": "2015-09-26T15:49:16.594521Z",
"duration": "00:00:00.4850036",
"host": {
"machineName": "LOCALHOST",
"processName": "TestService",
"processId": 5808,
"assembly": "MassTransit",
"assemblyVersion": "6.0.0.0",
"frameworkVersion": "4.0.30319.42000",
"massTransitVersion": "6.0.0.0",
"operatingSystemVersion": "Microsoft Windows NT 6.3.9600.0"
},
"results": {
"bus": {
"address": "rabbitmq://[::1]:5672/test/bus-testservice-xhwyyybjcryy3ofjbdjcpnoenx?durable=false&autodelete=true&prefetch=8",
"host": {
"type": "RabbitMQ",
"host": "[::1]",
"port": 5672,
"virtualHost": "test",
"username": "guest",
"password": "*****",
"connected": true
},
"receiveEndpoint": [
{
"transport": {
"type": "RabbitMQ",
"queueName": "input_queue",
"exchangeName": "input_queue",
"prefetchCount": 16,
"durable": true,
"queueArguments": {},
"exchangeArguments": {},
"purgeOnStartup": true,
"exchangeType": "fanout",
"bindings": [
{
"exchange": {
"exchangeName": "TestService.Contracts:UpdateCustomerAddress",
"exchangeType": "fanout",
"durable": true,
"arguments": {}
},
"routingKey": "",
"arguments": {}
}
]
},
"filters": [
{
"filterType": "deadLetter",
"filters": {
"filterType": "move",
"destinationAddress": "rabbitmq://[::1]:5672/test/input_queue_skipped?bind=true&queue=input_queue_skipped"
}
},
{
"filterType": "rescue",
"filters": {
"filterType": "moveFault",
"destinationAddress": "rabbitmq://[::1]:5672/test/input_queue_error?bind=true&queue=input_queue_error"
}
},
{
"filterType": "deserialize",
"deserializers": {
"json": {
"contentType": "application/vnd.masstransit+json"
},
"bson": {
"contentType": "application/vnd.masstransit+bson"
},
"xml": {
"contentType": "application/vnd.masstransit+xml"
}
},
"pipe": {
"TestService.Contracts.UpdateCustomerAddress": {
"filters": {
"filterType": "instance",
"type": "MassTransit.Testing.MultiTestConsumer+Of<TestService.Contracts.UpdateCustomerAddress>"
}
}
}
}
]
},
{
"transport": {
"type": "RabbitMQ",
"queueName": "bus-testservice-xhwyyybjcryy3ofjbdjcpnoenx",
"exchangeName": "bus-testservice-xhwyyybjcryy3ofjbdjcpnoenx",
"prefetchCount": 8,
"autoDelete": true,
"queueArguments": {
"x-expires": 60000
},
"exchangeArguments": {
"x-expires": 60000
},
"exchangeType": "fanout",
"bindings": []
},
"filters": [
{
"filterType": "deadLetter",
"filters": {
"filterType": "move",
"destinationAddress": "rabbitmq://[::1]:5672/test/bus-testservice-xhwyyybjcryy3ofjbdjcpnoenx_skipped?bind=true&queue=bus-testservice-xhwyyybjcryy3ofjbdjcpnoenx_skipped"
}
},
{
"filterType": "rescue",
"filters": {
"filterType": "moveFault",
"destinationAddress": "rabbitmq://[::1]:5672/test/bus-testservice-xhwyyybjcryy3ofjbdjcpnoenx_error?bind=true&queue=bus-testservice-xhwyyybjcryy3ofjbdjcpnoenx_error"
}
},
{
"filterType": "deserialize",
"deserializers": {
"json": {
"contentType": "application/vnd.masstransit+json"
},
"bson": {
"contentType": "application/vnd.masstransit+bson"
},
"xml": {
"contentType": "application/vnd.masstransit+xml"
}
},
"pipe": {}
}
]
}
]
}
}
}