Skip to content
This repository has been archived by the owner on May 1, 2024. It is now read-only.

Commit

Permalink
logic to create Rabbit MQ Uris for MassTransit
Browse files Browse the repository at this point in the history
  • Loading branch information
Jeremy D. Miller authored and Jeremy D. Miller committed Sep 16, 2022
1 parent 226df62 commit 6d0bfbd
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

namespace Jasper.RabbitMQ.Tests.Internals
{
public class RabbitMqEndpointTester
public class RabbitMqEndpointTests
{

[Fact]
Expand Down Expand Up @@ -179,5 +179,46 @@ public void generate_reply_uri_for_durable()
}


[Fact]
public void map_to_rabbit_mq_uri_with_queue()
{
var transport = new RabbitMqTransport();
transport.ConnectionFactory.HostName = "rabbitserver";

var endpoint = new RabbitMqEndpoint(transport);
endpoint.QueueName = "foo";

// No virtual host

endpoint.ToMassTransitUri().ShouldBe("rabbitmq:https://rabbitserver/foo".ToUri());

// With virtual host

transport.ConnectionFactory.VirtualHost = "v1";

endpoint.ToMassTransitUri().ShouldBe("rabbitmq:https://rabbitserver/v1/foo".ToUri());
}

[Fact]
public void map_to_rabbit_mq_uri_with_exchange()
{
var transport = new RabbitMqTransport();
transport.ConnectionFactory.HostName = "rabbitserver";

var endpoint = new RabbitMqEndpoint(transport);
endpoint.ExchangeName = "bar";

// No virtual host

endpoint.ToMassTransitUri().ShouldBe("rabbitmq:https://rabbitserver/bar".ToUri());

// With virtual host

transport.ConnectionFactory.VirtualHost = "v1";

endpoint.ToMassTransitUri().ShouldBe("rabbitmq:https://rabbitserver/v1/bar".ToUri());
}


}
}
28 changes: 27 additions & 1 deletion src/Jasper.RabbitMQ/Internal/RabbitMqEndpoint.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@
using Baseline;
using Jasper.Configuration;
using Jasper.Runtime;
using Jasper.Runtime.Interop.MassTransit;
using Jasper.Transports;
using Jasper.Transports.Sending;
using Jasper.Util;
using RabbitMQ.Client;

namespace Jasper.RabbitMQ.Internal
{
public class RabbitMqEndpoint : TransportEndpoint<IBasicProperties>
public class RabbitMqEndpoint : TransportEndpoint<IBasicProperties>, IMassTransitInteropEndpoint
{
public const string QueueSegment = "queue";
public const string ExchangeSegment = "exchange";
Expand Down Expand Up @@ -221,5 +222,30 @@ protected override void writeIncomingHeaders(IBasicProperties incoming, Envelope
envelope.Headers[pair.Key] =
pair.Value is byte[] b ? Encoding.Default.GetString(b) : pair.Value?.ToString();
}

public Uri? ToMassTransitUri()
{
var segments = new List<string>();
var virtualHost = _parent.ConnectionFactory.VirtualHost;
if (virtualHost.IsNotEmpty() && virtualHost != "/")
{
segments.Add(virtualHost);
}

if (QueueName.IsNotEmpty())
{
segments.Add(QueueName);
}
else if (ExchangeName.IsNotEmpty())
{
segments.Add(ExchangeName);
}
else
{
return null;
}

return $"rabbitmq:https://{_parent.ConnectionFactory.HostName}/{segments.Join("/")}".ToUri();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
using System;

namespace Jasper.Runtime.Interop.MassTransit;

public interface IMassTransitInteropEndpoint
{
Uri? ToMassTransitUri();
}

0 comments on commit 6d0bfbd

Please sign in to comment.