어떻게.NETCore 로 RabbitMQ 를 조작 합 니까?

RabbitMQ 가 뭐 예요?

RabbitMQ 는 erlang 언어 로 개 발 된 AMQP(Advanced Message Queuing Protocol)프로 토 콜 을 기반 으로 하 는 기업 급 메시지 큐 미들웨어 입 니 다.대기 열,구독/게시,경로,어댑터 등 작업 모드 를 실현 할 수 있 습 니 다.
왜 RabbitMQ 를 사용 합 니까?
4.567917.비동기 처리:예 를 들 어 메 일 발송,문자 발송 등 처리 결 과 를 기다 릴 필요 가 없 는 조작
  • 응용 디 결합:예 를 들 어 주문 이 성공 한 후에 창고 에 출하 를 알 리 고 창고 의 응답 을 기다 리 지 않 아 도 됩 니 다.메시지 대기 열 을 통 해 창고 에 알 리 고 응용 간 결합 프로그램 을 낮 추 며 두 가지 기능 모듈 을 병행 개발 할 수 있 습 니 다
  • 4.567917.데이터 절삭 봉:사재 기 또는 다른 활동 페이지 에서 서 비 스 는 폭발 적 인 요청 상태 에 있 고 데이터 베 이 스 를 직접 연결 하면 데이터 베 이 스 는 쉽게 무 너 집 니 다.사재 기 상품 도 재고 가 초과 판매 되 기 쉽다.대열 을 통 해 이 문 제 를 효과적으로 해결 할 수 있다4.567917.로그 처리:단일 컴퓨터 에서 로 그 는 파일 디 렉 터 리 에 직접 기록 되 지만 분포 식 응용 에서 로 그 는 통 일 된 처리 체제 가 있어 야 합 니 다.메시지 대기 열 을 통 해 특정한 소비 단 에서 통일 적 으로 처리 할 수 있 습 니 다4.567917.정보 통신:예 를 들 어 생산 단 과 소비 단 은 대열 을 통 해 비동기 통신 을 할 수 있다어떻게 RabbitMQ 를 설치 합 니까?
    윈도우 엔 드
    1.erlang 언어 실행 환경 설치
    https://erlang.org/download/otp_win64_23.2.exe
    다운로드 후 바로 다음 단계 로 넘 어가 면 됩 니 다.
    2.RabbitMQ 설치
    https://www.rabbitmq.com/install-windows.html
    직접 클릭 하여 다음 단 계 를 설치 하면 규정 에 따라
    3.RabbitMQ 를 설치 한 웹 관리 플랫폼
    RabbitMQ 의 관리 플랫폼 은 플러그 인 형식 으로 사용 되 므 로 관리 플랫폼 을 수 동 으로 사용 해 야 합 니 다.
    Windows 에서 RabbitMQ 는 기본적으로 C:\Program Files\\RabbitMQ Server\\rabbitmq 에 설치 되 어 있 습 니 다.server-3.8.14 대.
    sbin 을 열 고 cmd 나 powershell 에서 실행 합 니 다.
    
    rabbitmq-plugins.bat enable rabbitmq_management
    설치 완료 후 브 라 우 저 열기http://localhost:15672/ RabbitMQ 의 관리 인터페이스 를 볼 수 있 습 니 다.기본 계 정 비밀 번 호 를 입력 하 십시오 guest 로그 인 에 성 공 했 습 니 다.
    Linux 환경 설치
    1.Ubuntu:https://www.rabbitmq.com/install-debian.html
    2.Centos:https://www.rabbitmq.com/install-rpm.html
    RabbitMQ 의 기본 개념
    생산자
    메시지 단
    소비자
    메시지 가 져 오기 및 처리 단
    Connection
    터미널 연결모든 Connection 은 RabbitMQ 백 스테이지 에서 볼 수 있 습 니 다.

    Channel
    Channel 은 Connection 에 설 치 된 가상 통신 관 이다.일반적으로 메시지 대기 열 에 여러 메 시 지 를 기록 합 니 다.모든 메시지 에 TCP 연결 을 만 들 지 않 기 위해 RabbitMQ 는 여러 메시지 가 하나의 Connection 을 공용 하여 MQ 의 부하 능력 을 크게 향상 시 킬 수 있 습 니 다.
    Exchange
    Exchange 는 가상 교환기 다.모든 메 시 지 는 교환 기 를 통 해 대응 하 는 대기 열 에 들 어 갈 수 있어 야 네트워크 장치 의 교환기 로 이해 할 수 있다 는 뜻 이다.
    Queue
    Queue 는 메 시 지 를 저장 하 는 내부 대상 으로 모든 Rabbit MQ 메 시 지 는 Queue 에 저 장 됩 니 다.생산자 가 생산 한 정 보 는 Queue 에 저장 되 고 소비자 가 얻 은 정보 도 Queue 에서 얻 을 수 있 습 니 다.
    어떻게.NET Core 에서 RabbitMQ 를 사용 합 니까?
    nuget 설치
    
    dotnet add package RabbitMQ.Client
    생산 자 를 창건 하 다
    
    const string QUEUENAME = "HELLO_MQ";
    //        
    var factory = new ConnectionFactory()
    {
        UserName = "guest",
        Password = "guest",
        HostName = "localhost",
        Port = 5672,  //RabbitMQ     
    };
    
    while (true)
    {
        using var conn = factory.CreateConnection();
        var chanel = conn.CreateModel();
    
        chanel.QueueDeclare(QUEUENAME, true, false, false);
        Console.WriteLine("      :");
        var input = Console.ReadLine();
        chanel.BasicPublish("", QUEUENAME, null, Encoding.Default.GetBytes("hello rabbitmq:" + input));
    }
    순환 중 에 값 을 입력 하고 enter 를 누 르 면 대기 열 에 메 시 지 를 보 낼 수 있 습 니 다.
    RabbitMQ 의 관리 백 스테이지 에서 직접 볼 수도 있어 요.



    우리 가 보 낸 메 시 지 를 볼 수 있 습 니 다.어떤 행운 의 소비자 가 와 서 소비 하 기 를 기다 릴 뿐이다.
    소비 자 를 만들다
    
    const string QUEUENAME = "HELLO_MQ";
    var factory = new ConnectionFactory()
    {
        UserName = "guest",
        Password = "guest",
        HostName = "localhost",
        Port = 5672,
    };
    
    var conn = factory.CreateConnection();
    var chanel = conn.CreateModel();
    chanel.QueueDeclare(QUEUENAME, true, false, false);
    EventingBasicConsumer consumer = new EventingBasicConsumer(chanel);
    consumer.Received += (a, e) =>
    {
        Console.WriteLine($"{DateTime.Now.ToString()}     :" + Encoding.Default.GetString(e.Body.ToArray()));
        chanel.BasicAck(e.DeliveryTag, true); //     ,RabbitMQ             
    };
    chanel.BasicConsume(QUEUENAME, false, consumer);
    
    Console.WriteLine("    ");
    Console.ReadLine();
    시작 에 성공 하면 consumer 의 Received 방법 은 MQ 로부터 메 시 지 를 받 습 니 다.

    처리 가 완료 되면 chennel 의 Basic Ack 방법 을 사용 하지 않 는 다 면 이 메 시 지 는 여전히 존재 할 것 이 며,다음 에 소비자 가 나타 나 면 다시 소비자 에 게 전달 할 것 이다.
    간단 한 래 빗 MQ 헬 로 월 드 는 여기까지 면 완성 입 니 다.다음은 조금 고 급 스 러 운 애플 리 케 이 션 입 니 다.
    RabbitMQ 작업 모드
    Work Queue 작업 대기 열 모드

    작업 대기 행렬 모델 은 한 생산자 가 여러 소비자 에 게 대응 한 다 는 뜻 이다.RabbitMQ 는 폴 링 을 사용 하여 모든 소비자 에 게 메 시 지 를 보 낼 것 이다.
    publish/subscribe
    게시 구독 모드 는 비교적 많이 사용 되 는 것 에 속한다.

    구독 을 발표 하 는 것 은 교환기 가 여러 대기 열 에 메 시 지 를 발표 하 는 것 입 니 다.여러 대열 이 여러 소비자 에 게 다시 대응 하 다.
    구독 모드 에 대응 하 는 교환기 형식의 팬 아웃 을 발표 합 니 다.
    소비자
    A
    
    const string QUEUENAME = "HELLO_MQ_B";
    const string TESTEXCHANGE = "TESTEXCHANGE";
    var factory = new ConnectionFactory()
    {
        UserName = "guest",
        Password = "guest",
        HostName = "localhost",
        Port = 5672,
    };
    
    var conn = factory.CreateConnection();
    var channel = conn.CreateModel();
    //    
    channel.QueueDeclare(QUEUENAME, true, false, false);
    //     
    channel.ExchangeDeclare(TESTEXCHANGE, ExchangeType.Fanout, true, false);
    //        
    channel.QueueBind(QUEUENAME, TESTEXCHANGE, "");
    var consumer = new EventingBasicConsumer(channel);
    consumer.Received += (a, e) =>
    {
        Console.WriteLine($"{DateTime.Now.ToString()}     :" + Encoding.Default.GetString(e.Body.ToArray()));
        channel.BasicAck(e.DeliveryTag, true); //     ,RabbitMQ             
    };
    channel.BasicConsume(QUEUENAME, false, consumer);
    
    Console.WriteLine("    ");
    Console.ReadLine();
    B
    
    const string QUEUENAME = "HELLO_MQ";
    const string TESTEXCHANGE = "TESTEXCHANGE";
    var factory = new ConnectionFactory()
    {
        UserName = "guest",
        Password = "guest",
        HostName = "localhost",
        Port = 5672,
    };
    
    var conn = factory.CreateConnection();
    var channel = conn.CreateModel();
    //    
    channel.QueueDeclare(QUEUENAME, true, false, false);
    //     
    channel.ExchangeDeclare(TESTEXCHANGE, ExchangeType.Fanout, true, false);
    //        
    channel.QueueBind(QUEUENAME, TESTEXCHANGE, "");
    var consumer = new EventingBasicConsumer(channel);
    consumer.Received += (a, e) =>
    {
        Console.WriteLine($"{DateTime.Now.ToString()}     :" + Encoding.Default.GetString(e.Body.ToArray()));
        channel.BasicAck(e.DeliveryTag, true); //     ,RabbitMQ             
    };
    channel.BasicConsume(QUEUENAME, false, consumer);
    
    Console.WriteLine("    ");
    Console.ReadLine();
    생산자
    
    const string QUEUENAME = "HELLO_MQ";
    const string QUEUENAME_B = "HELLO_MQ_B";
    const string TESTEXCHANGE = "TESTEXCHANGE";
    
    //        
    var factory = new ConnectionFactory()
    {
        UserName = "guest",
        Password = "guest",
        HostName = "localhost",
        Port = 5672,  //RabbitMQ     
    };
    using var conn = factory.CreateConnection();
    while (true)
    {
    
        var channel = conn.CreateModel();
        //     
        channel.ExchangeDeclare(TESTEXCHANGE, ExchangeType.Fanout, true, false);
        Console.WriteLine("      :");
        var input = Console.ReadLine();
        channel.BasicPublish(TESTEXCHANGE,"", null, Encoding.Default.GetBytes("hello rabbitmq:" + input));
    }
    생산자 가 실행 에 성공 하면 RabbitMQ 백 스테이지 에 교환기 가 나타 납 니 다.교환 기 회 를 클릭 하면 교환기 아래 두 대기 열 이 연결 되 어 있 습 니 다.


    생산자 로부터 메 시 지 를 대열 로 보 내 면 두 소비 자 는 동시에 메 시 지 를 받는다.

    라 우 팅 모드

    routing 모드 에 대응 하 는 교환기 유형 은 direct 입 니 다.게시 구독 모드 와 의 차이 점 은 routing 모드 에서 메 시 지 를 구분 할 수 있 는 routingkey 를 지정 할 수 있 습 니 다.
    생산자
    
    var channel = conn.CreateModel();
    //     
    channel.ExchangeDeclare(TESTEXCHANGE, ExchangeType.Direct, true, false);
    //        
    Console.WriteLine("      :");
    var input = Console.ReadLine();
    channel.BasicPublish(TESTEXCHANGE, "INFO", null, Encoding.Default.GetBytes("hello rabbitmq:" + input));
    소비자 A
    
    //    
    channel.QueueDeclare(QUEUENAME, true, false, false);
    //     
    channel.ExchangeDeclare(TESTEXCHANGE, ExchangeType.Direct, true, false);
    //        
    channel.QueueBind(QUEUENAME, TESTEXCHANGE, "INFO");
    소비자 B
    
    //    
    channel.QueueDeclare(QUEUENAME, true, false, false);
    //     
    channel.ExchangeDeclare(TESTEXCHANGE, ExchangeType.Direct, true, false);
    //        
    channel.QueueBind(QUEUENAME, TESTEXCHANGE, "ERROR");
    바 인 딩 성공 후 메 시 지 를 보 내 면 소비자 A 는 메 시 지 를 받 을 수 있 고 소비자 B 는 메 시 지 를 받 을 수 없습니다.
    지정 한 routingKey 생산 소식 이 있 으 면 AB 소비자 들 이 모두 받 는 경우 입 니 다.RabbitMQ 백 스테이지 교환기 에서 연 결 된 Queue 가 여러 개의 routingKey 를 중복 연결 하 는 지 확인 하 는 것 을 권장 합 니 다.

    topic 어댑터 모드

    어댑터 모드 에서 RabbitMQ 는 모호 한 매 칭 을 사용 하여 메 시 지 를 어느 생산자 에 게 보 낼 지 결정 합 니 다.마스크 에는 두 개의 기호 가 있어 서 routingKey 와 일치 합 니 다.
    1.*일치 하 는 문자:*.qq.com 은 1.qq.com 과 일치 합 니 다.
    2.\#하나 이상 의 문자 와 일치 합 니 다.예 를 들 어*.qq.com 은 1.qq.com 또는 1111.qq.com 과 일치 할 수 있 습 니 다.
    다른 조작 은 기본적으로 routing 모드 와 같 습 니 다.
    헤더 모드
    header 모드 는 routingkey 를 header 에 넣 는 것 입 니 다.routingkey 를 취소 하 였 습 니 다.그리고 하나의 사전 으로 K,V 를 전달 하 는 방식 으로 일치 합 니 다.
    예 를 들 어 사용자 에 게 메 일과 문 자 를 동시에 보 내 려 면 header 의 키 쌍 을 통 해 바 인 딩 된 값 과 일치 하고 메 시 지 를 문자 와 메 일 을 보 내 는 생산자 에 게 전달 할 수 있 습 니 다.
    이상 은.NETCore 로 RabbitMQ 를 어떻게 조작 하 는 지 에 대한 상세 한 내용 입 니 다.NETCore 로 RabbitMQ 를 조작 하 는 지 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 해 주 십시오!

    좋은 웹페이지 즐겨찾기