【发布时间】:2021-03-10 19:34:47
【问题描述】:
我已经用 masstransit rabbitMQ 和 signalR 实现了一个 .net 核心 web api,我试图让 signalR 背板工作。 我怀疑问题出在公共交通为我解决的交换绑定上,但我无法弄清楚我做错了什么导致这种行为。
我的目标是能够拥有另一个应用程序将调用的端点(现在我为此使用邮递员),它将向所有客户端(js 端)发布消息,但只要消息发布并到达由于没有绑定,因此交换没有任何反应。
在 rabbitMQ 管理工具中,它创建一个交换而不绑定到另一个交换/队列
我的创业:
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
谁能帮帮我?
【问题讨论】:
标签: .net-core rabbitmq signalr masstransit