Как лучше всего передавать сообщения нескольким клиентским приложениям netcore? - PullRequest
1 голос
/ 18 апреля 2019

Мне нужно отправлять сообщения json одной тысяче базовых приложений dotnet одновременно в одну и ту же сеть. В настоящее время я использую остальные веб-API с собственным сервером Kestrel, и я спрашиваю меня, является ли это лучшим решением. Существует ли автономный брокер сообщений для основного приложения dotnet или другого решения?

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Вы можете использовать служебную шину с темой. Вы можете отправить свое сообщение в одну тему и подписаться на приложение N на эту тему, чтобы получать сообщения.

Каждое приложение может иметь собственную подписку в разделе. Более подробную информацию о том, как создать тему и подписку можно найти здесь здесь .

Вы можете использовать Service Bus Explorer для локальной отладки и просмотра сообщений.

0 голосов
/ 20 апреля 2019

Я бы выбрал 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);
       }
    }
}

Добавьте SignalR в StartUp

 services.AddSignalR();

 app.UseSignalR(routes =>
 {
      routes.MapHub<ChatHub>("/chatHub");
 });     

Затем определите сторону клиента(не забудьте включить библиотеку js 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, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    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();
});

SendMessage определен в Hub как метод, и сервер его прослушает.ReceiveMessage является прослушивателем на стороне клиента, чтобы показать, что сервер отправляет.

весь код из signalR документация

...