我需要将json消息同时发送到一千个dotnet核心应用程序到同一个网络。目前我使用rest web api和自托管的kestrel服务器,我问我这是否是最好的解决方案。是否存在针对dotnet核心应用程序或其他解决方案的自托管消息代理?
您可以使用Service Top with Topic。您可以将消息发送到一个主题,并将N应用程序订阅到该主题以接收消息。
每个应用程序都可以在主题下拥有自己的订阅有关如何创建主题和订阅的更多信息,请访问here。
您可以使用Service Bus Explorer进行本地调试并查看消息。
我会选择signalR
定义你的Hub
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
namespace SignalRChat.Hubs
{
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
}
在StartUp
添加SignalR
services.AddSignalR();
app.UseSignalR(routes =>
{
routes.MapHub<ChatHub>("/chatHub");
});
然后定义客户端(不要忘记包含js库qazxsw poi)
signalr.js
"use strict";
var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();
//Disable send button until connection is established
document.getElementById("sendButton").disabled = true;
connection.on("ReceiveMessage", function (user, message) {
var msg = message.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
var encodedMsg = user + " says " + msg;
var li = document.createElement("li");
li.textContent = encodedMsg;
document.getElementById("messagesList").appendChild(li);
});
connection.start().then(function(){
document.getElementById("sendButton").disabled = false;
}).catch(function (err) {
return console.error(err.toString());
});
document.getElementById("sendButton").addEventListener("click", function (event) {
var user = document.getElementById("userInput").value;
var message = document.getElementById("messageInput").value;
connection.invoke("SendMessage", user, message).catch(function (err) {
return console.error(err.toString());
});
event.preventDefault();
});
在Hub中定义为方法,服务器将监听它。 SendMessage
是客户端的监听器,用于显示服务器发送的内容。
来自ReceiveMessage
的所有代码