使用 RabbitMQ 和 SignalR 交换绑定在 MassTransit 中不起作用
Exchange binding not working in MassTransit with RabbitMQ and SignalR
我已经使用 masstransit rabbitMQ 和 signalR 实现了 .net 核心网络 api,我正在尝试让 signalR 背板工作。
我怀疑问题出在 masstransit 为我解决的交换绑定问题,但我无法弄清楚我做错了什么才会有这种行为。
我的目标是能够拥有另一个应用程序将调用的端点(目前我为此使用邮递员),它将向所有客户端(js 端)发布消息,但无论何时发布消息和它到达交易所没有任何反应,因为没有绑定。
在 rabbitMQ 管理工具中,它创建了一个没有绑定到另一个的交换器exchange/queue
我的创业公司:
public void ConfigureServices(IServiceCollection services)
{
Utilities utilities = new Utilities(Configuration);
RabbitMQIdentity rabbitMQIdentity = utilities.GetRabbitMQIdentity();
var username = rabbitMQIdentity.UserName;
var password = rabbitMQIdentity.Password;
var hostName = rabbitMQIdentity.HostName;
var portNumber = rabbitMQIdentity.Port;
services.AddHttpClient();
services.AddControllers();
services.AddSignalR();
services.AddMassTransit(config =>
{
config.AddSignalRHub<NotificationHub>();
config.UsingRabbitMq((ctx, cfg) =>
{
cfg.Host($"amqp://{username}:{password}@{hostName}:{portNumber}");
cfg.ConfigureEndpoints(ctx);
});
});
services.AddMassTransitHostedService();
services.AddSingleton<IHostEnvironment>(hostEnvironment);
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton<LogConfigurationUtility, WebLogConfigurationUtility>();
services.AddCors(options =>
{
options.AddDefaultPolicy(builder =>
{
builder.SetIsOriginAllowed((x) => Configuration["CorsWhiteList"].Split(';').Any(x.Contains))
.WithMethods("GET", "POST")
.AllowAnyHeader()
.AllowCredentials();
});
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseCors();
app.UseMiddleware<RequestMiddleware>();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapHub<NotificationHub>("/notificationhub");
});
}
我的发布方式:
IReadOnlyList<IHubProtocol> protocols = new IHubProtocol[] { new JsonHubProtocol() };
publishEndpoint.Publish<All<NotificationHub>>(new
{
Messages = protocols.ToProtocolDictionary("Notify", new object[] { "backend-process", "oiiiii" })
});
我的客户端:
useEffect(() => {
$(function() {
const connection = new HubConnectionBuilder()
.withUrl(hubUrl)
.configureLogging(LogLevel.Trace)
.build();
// Create a function that the hub can call to broadcast messages.
connection.on("Notify", (status) => {
console.log("entrouuuuuu");
setNotification(status);
});
// Start the connection.
async function start() {
try {
await connection.start();
connection.invoke("InitializeClient", orderId);
console.log("SignalR Connected.");
} catch (err) {
setTimeout(start, 5000);
}
}
start();
});
}, []);
我遵循了 MassTransit 官方文档并试图找出示例示例与我的示例有何不同,但我似乎无法弄清楚(除了正确创建和绑定交换之外)。
https://masstransit-project.com/advanced/signalr/quickstart.html
https://masstransit-project.com/advanced/signalr/sample.html
有人能帮帮我吗?
7.1.6 中存在一个错误has been fixed,将在 7.1.7 中发布。
我已经使用 masstransit rabbitMQ 和 signalR 实现了 .net 核心网络 api,我正在尝试让 signalR 背板工作。 我怀疑问题出在 masstransit 为我解决的交换绑定问题,但我无法弄清楚我做错了什么才会有这种行为。
我的目标是能够拥有另一个应用程序将调用的端点(目前我为此使用邮递员),它将向所有客户端(js 端)发布消息,但无论何时发布消息和它到达交易所没有任何反应,因为没有绑定。
在 rabbitMQ 管理工具中,它创建了一个没有绑定到另一个的交换器exchange/queue
我的创业公司:
public void ConfigureServices(IServiceCollection services)
{
Utilities utilities = new Utilities(Configuration);
RabbitMQIdentity rabbitMQIdentity = utilities.GetRabbitMQIdentity();
var username = rabbitMQIdentity.UserName;
var password = rabbitMQIdentity.Password;
var hostName = rabbitMQIdentity.HostName;
var portNumber = rabbitMQIdentity.Port;
services.AddHttpClient();
services.AddControllers();
services.AddSignalR();
services.AddMassTransit(config =>
{
config.AddSignalRHub<NotificationHub>();
config.UsingRabbitMq((ctx, cfg) =>
{
cfg.Host($"amqp://{username}:{password}@{hostName}:{portNumber}");
cfg.ConfigureEndpoints(ctx);
});
});
services.AddMassTransitHostedService();
services.AddSingleton<IHostEnvironment>(hostEnvironment);
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton<LogConfigurationUtility, WebLogConfigurationUtility>();
services.AddCors(options =>
{
options.AddDefaultPolicy(builder =>
{
builder.SetIsOriginAllowed((x) => Configuration["CorsWhiteList"].Split(';').Any(x.Contains))
.WithMethods("GET", "POST")
.AllowAnyHeader()
.AllowCredentials();
});
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseCors();
app.UseMiddleware<RequestMiddleware>();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapHub<NotificationHub>("/notificationhub");
});
}
我的发布方式:
IReadOnlyList<IHubProtocol> protocols = new IHubProtocol[] { new JsonHubProtocol() };
publishEndpoint.Publish<All<NotificationHub>>(new
{
Messages = protocols.ToProtocolDictionary("Notify", new object[] { "backend-process", "oiiiii" })
});
我的客户端:
useEffect(() => {
$(function() {
const connection = new HubConnectionBuilder()
.withUrl(hubUrl)
.configureLogging(LogLevel.Trace)
.build();
// Create a function that the hub can call to broadcast messages.
connection.on("Notify", (status) => {
console.log("entrouuuuuu");
setNotification(status);
});
// Start the connection.
async function start() {
try {
await connection.start();
connection.invoke("InitializeClient", orderId);
console.log("SignalR Connected.");
} catch (err) {
setTimeout(start, 5000);
}
}
start();
});
}, []);
我遵循了 MassTransit 官方文档并试图找出示例示例与我的示例有何不同,但我似乎无法弄清楚(除了正确创建和绑定交换之外)。
https://masstransit-project.com/advanced/signalr/quickstart.html https://masstransit-project.com/advanced/signalr/sample.html
有人能帮帮我吗?
7.1.6 中存在一个错误has been fixed,将在 7.1.7 中发布。