(C#/NATS) Docker NATS 서비스가 포함된 Pub/Sub

1. NATS 서비스 실행

cmd 창에서 다음 명령을 사용하여 NATS 서비스를 활성화합니다.

docker run -p 4222:4222 nats -p 4222


2. WebApi Nats 서버 생성

ASP.NET Core 웹 API 프로젝트 만들기


Nsts.Client 너겟 패키지를 추가합니다.


ValuesController.cs를 추가하고 아래와 같이 클라이언트 측에 게시할 코드를 배치합니다.

using System.Text;

using Microsoft.AspNetCore.Mvc;

using NATS.Client;

namespace WebAppNatsSerer.Controllers
{
    (Route("(controller)"))
    public class ValuesController : Controller
    {
        // POST api/values
        (HttpPost)
        public IActionResult Post((FromBody) string value)
        {
            Thread.Sleep(5000);

            ConnectionFactory cf = new ConnectionFactory();
            Options opts = ConnectionFactory.GetDefaultOptions();

            opts.Url = "nats://localhost:4222";

            IConnection c = cf.CreateConnection(opts);

            c.Publish("worker", Encoding.UTF8.GetBytes($"hello, world: {value}"));
            c.Close();

            return Ok();
        }
    }
}

(API가 호출되면 클라이언트 측에 게시됩니다.)

3. 고객 창출

ConsoleApp 프로젝트를 만들고 구독 코드를 붙여넣습니다.
게시하면 구독하는 시점에서 이벤트가 발생합니다.
(“worker”(subject)라는 채널을 통해 Pub/Sub가 됩니다.)

using NATS.Client;

namespace ConsoleAppNatsWorker
{
    internal class Program
    {
        static void Main(string() args)
        {
            Console.WriteLine("Worker");

            ConnectionFactory cf = new ConnectionFactory();
            Options opts = ConnectionFactory.GetDefaultOptions();
            opts.Url = "nats://localhost:4222";

            IConnection c = cf.CreateConnection(opts);

            EventHandler<MsgHandlerEventArgs> h = (sender, args) =>
            {
                Console.WriteLine($"worker received {args.Message}");
            };

            IAsyncSubscription s = c.SubscribeAsync("worker", h);

            while (true)
            {
                Console.WriteLine("worker listening...");
                Thread.Sleep(TimeSpan.FromSeconds(1));
            }
        }
    }
}

(Worker listening…이 1초 간격으로 화면에 표시되고 게시가 진행 중일 때 수신 메시지가 표시됩니다.)

결과(실행 요청 서버 -> 클라이언트)

클라이언트 측은 아래와 같이 구독 후 대기합니다.


WebAPI가 호출되면 WebAPI에 게시합니다.

게시된 콘텐츠는 아래와 같이 클라이언트 측에서 렌더링됩니다.


(원천)
https://github.com/kei-soft/DockerNatsTest

GitHub – kei-soft/DockerNatsTest

GitHub에서 계정을 생성하여 kei-soft/DockerNatsTest 개발에 기여하십시오.

github.com