C\#RabbitMQ 를 이용 하여 점대 점 메시지 전송 실현

메시지 큐 모델
모든 MQ 제품 은 모델 추상 적 으로 똑 같은 과정 이다.
소비자(consumer)가 특정한 대열 을 구독 하 다.생산자(producer)가 메 시 지 를 만 든 후 대기 열(queue)에 발표 하고 마지막 으로 감청 하 는 소비자 에 게 메 시 지 를 보 냅 니 다.

RabbitMQ 설정
RabbitMQ 는 교환 기 를 통 해 해당 대기 열 에 메 시 지 를 전달 하기 때문에 대기 열 은 교환기 와 연결 해 야 합 니 다.이 예 는 기본 amq.direct 교환기 에 대기 열 을 연결 하고 Routing key 를 설정 합 니 다.다음 그림 과 같 습 니 다.

RabbitMQ 동적 라 이브 러 리 설치
NuGet 패키지 관리 자 를 통 해 RabbitMQ.Client 를 설치 합 니 다.다음 과 같 습 니 다.

RabbitMQ.Client 지식 포인트
  • Connection Factory:하나의 인 스 턴 스 를 구성 하고 주로 연결 을 만 듭 니 다
  • IConnection:AMQP 프로 토 콜 을 기반 으로 하 는 연결 을 표시 합 니 다
  • IModel:RabbitMQ 채널 을 표시 합 니 다.하나의 대기 열 을 설명 한 다음 에 소 비 를 시작 할 수 있 습 니 다
  • 4.567917.Evening Basic Consumer:독립 적 인 사건 감청 을 바탕 으로 하 는 기초 소비자 가 정 보 를 감청 하고 받 을 수 있 습 니 다4.567917.생산자 기본 절차:1.연결 생 성 2.연결 을 바탕 으로 채널 생 성 3.채널 성명 대기 열 을 바탕 으로 4.생산 을 시작 하고 메 시 지 를 발표 합 니 다4.567917.소비자 기본 절차:1.연결 을 만 듭 니 다.2.연결 을 바탕 으로 채널 을 만 듭 니 다.3.채널 성명 대기 열 을 바탕 으로 4.소비 자 를 만 듭 니 다.5.채널 과 소비 자 를 연결 하고 소 비 를 시작 합 니 다예제 효과 도
    이 사례 는 주로 한 생산자,한 소비자 가 메시지 대열 을 통 해 메 시 지 를 전달 하고 받는다.
    생산 자 는 메시지 발송 을 책임 집 니 다.아래 그림 과 같 습 니 다.

    소비 자 는 정보 수신 을 책임 집 니 다.아래 그림 과 같 습 니 다.

    핵심 코드
    코드 구조:주로 생산자,소비자,공공 기초 코드 를 포함 하 는데 다음 과 같다.

    RabbitMqHelper 는 주로 연결 을 만 듭 니 다.다음 과 같 습 니 다.
    
    public class RabbitMqHelper
        {
    
            /// <summary>
            ///     
            /// </summary>
            /// <returns></returns>
            public IConnection GetConnection()
            {
                try
                {
                    var factory = new ConnectionFactory()
                    {
                        HostName = "127.0.0.1",
                        Port = 5672,
                        UserName = "guest",
                        Password = "guest",
                        VirtualHost = "/ShortMsgHost"
                    };
                    var conn = factory.CreateConnection();
                    return conn;
                }
                catch (Exception ex) {
                    throw ex;
                }
            }
    
    
    
        }
    RabbmitMqSendHelper 는 메 시 지 를 보 내 는 데 사 용 됩 니 다.다음 과 같 습 니 다.
    
    public class RabbmitMqSendHelper : RabbitMqHelper
        {
            /// <summary>
            ///     
            /// </summary>
            /// <param name="msg"></param>
            /// <returns></returns>
            public bool SendMsg(string msg)
            {
                try
                {
                    using (var conn = GetConnection())
                    {
                        using (var channel = conn.CreateModel())
                        {
                            channel.QueueDeclare(queue: "ShortMsgQueue",
                                         durable: true,
                                         exclusive: false,
                                         autoDelete: false,
                                         arguments: null);
                            var body = Encoding.UTF8.GetBytes(msg);
    
                            channel.BasicPublish(exchange: "amq.direct",
                                                 routingKey: "ShortMsgKey",
                                                 basicProperties: null,
                                                 body: body);
    
                            //Console.WriteLine(" [x] Sent {0}", message);
                        };
                    };
                    return true;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
    RabbitMqReceiveHelper 는 주로 정 보 를 받 는 데 사 용 됩 니 다.다음 과 같 습 니 다.
    
    public class RabbitMqReceiveHelper : RabbitMqHelper
        {
            public RabbitMqReceiveEventHandler OnReceiveEvent;
    
            private IConnection conn;
    
            private IModel channel;
    
            private EventingBasicConsumer consumer;
    
            public bool StartReceiveMsg()
            {
                try
                {
                    conn = GetConnection();
    
                    channel = conn.CreateModel();
    
                    channel.QueueDeclare(queue: "ShortMsgQueue",
                                    durable: true,
                                    exclusive: false,
                                    autoDelete: false,
                                    arguments: null);
    
                    consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>
                    {
                        var body = ea.Body.ToArray();
                        var message = Encoding.UTF8.GetString(body);
                        //Console.WriteLine(" [x] Received {0}", message);
                        if (OnReceiveEvent != null)
                        {
                            OnReceiveEvent(message);
                        }
                    };
                    channel.BasicConsume(queue: "ShortMsgQueue",
                                            autoAck: true,
                                            consumer: consumer);
                    return true;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
    저자:Alan.hsiang
    출처:http://www.cnblogs.com/hsiang/
    이상 은 C\#RabbitMQ 를 이용 하여 점 대 점 메시지 전송 을 실현 하 는 예제 에 대한 상세 한 내용 입 니 다.c\#RabbitMQ 로 점 대 점 메시지 전송 을 실현 하 는 자 료 는 우리 의 다른 관련 글 을 주목 하 세 요!

    좋은 웹페이지 즐겨찾기