C\#RabbitMQ 를 이용 하여 점대 점 메시지 전송 실현
6439 단어 c#RabbitMQ점대 점 메시지 전송
모든 MQ 제품 은 모델 추상 적 으로 똑 같은 과정 이다.
소비자(consumer)가 특정한 대열 을 구독 하 다.생산자(producer)가 메 시 지 를 만 든 후 대기 열(queue)에 발표 하고 마지막 으로 감청 하 는 소비자 에 게 메 시 지 를 보 냅 니 다.
RabbitMQ 설정
RabbitMQ 는 교환 기 를 통 해 해당 대기 열 에 메 시 지 를 전달 하기 때문에 대기 열 은 교환기 와 연결 해 야 합 니 다.이 예 는 기본 amq.direct 교환기 에 대기 열 을 연결 하고 Routing key 를 설정 합 니 다.다음 그림 과 같 습 니 다.
RabbitMQ 동적 라 이브 러 리 설치
NuGet 패키지 관리 자 를 통 해 RabbitMQ.Client 를 설치 합 니 다.다음 과 같 습 니 다.
RabbitMQ.Client 지식 포인트
이 사례 는 주로 한 생산자,한 소비자 가 메시지 대열 을 통 해 메 시 지 를 전달 하고 받는다.
생산 자 는 메시지 발송 을 책임 집 니 다.아래 그림 과 같 습 니 다.
소비 자 는 정보 수신 을 책임 집 니 다.아래 그림 과 같 습 니 다.
핵심 코드
코드 구조:주로 생산자,소비자,공공 기초 코드 를 포함 하 는데 다음 과 같다.
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 로 점 대 점 메시지 전송 을 실현 하 는 자 료 는 우리 의 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.