C\#RabbitMQ 로 메시지 구독 과 발 표를 실현 합 니 다.
부채 형 교환 기 는 방송 모드 를 사용 하여 연 결 된 교환기 에 따라 그 에 대응 하 는 모든 대기 열 로 이동 합 니 다.교환기 에 보 내 는 메 시 지 는 이 교환기 와 연 결 된 모든 대기 열 에 전 송 됩 니 다.서브 넷 방송 처럼 모든 서브 넷 안의 호스트 가 복사 메 시 지 를 받 았 다.팬 아웃 교환기 가 메 시 지 를 전달 하 는 것 이 가장 빠르다.
RabbitMQ 콘 솔 조작
두 대기 열 추가
같은 Virtual host 에 두 개의 대기 열 Q1,Q2 를 추가 합 니 다.아래 그림 과 같 습 니 다.
귀속 fanout 교환기
두 대기 열 을 시스템 의 기본 fanout 교환기 에 연결 합 니 다.다음 과 같 습 니 다.
예제 효과 도
생산 자 는 Fanout 타 입 교환기 로 정 보 를 발표 합 니 다.아래 그림 과 같 습 니 다.
생산자 가 메 시 지 를 발표 할 때 Q1,Q2 두 대기 열 은 모두 받 을 수 있 습 니 다.아래 그림 과 같 습 니 다.
소비 자 를 시작 하면 두 소비 자 는 모두 관련 정 보 를 구독 할 것 이다.다음 그림 과 같다.
핵심 코드
소식 발표
연결 을 만 든 후 채널 성명 유형 을 Fanout 의 교환기 로 다음 과 같 습 니 다.
/// <summary>
/// fanout ,
/// </summary>
public class RabbitMqFanoutSendHelper : RabbitMqHelper {
/// <summary>
///
/// </summary>
/// <param name="msg"></param>
/// <returns></returns>
public bool SendMsg(string msg)
{
try
{
using (var conn = GetConnection("/Alan.hsiang"))
{
using (var channel = conn.CreateModel())
{
channel.ExchangeDeclare(exchange: "amq.fanout", type: ExchangeType.Fanout,durable:true);
var body = Encoding.UTF8.GetBytes(msg);
channel.BasicPublish(exchange: "amq.fanout",
routingKey: "",
basicProperties: null,
body: body);
//Console.WriteLine(" [x] Sent {0}", message);
};
};
return true;
}
catch (Exception ex)
{
throw ex;
}
}
}
메시지 구독연결 을 만 든 후 채널 성명 유형 은 Fanout 의 교환기 이 고 대기 열 을 연결 하여 구독 합 니 다.다음 과 같 습 니 다.
/// <summary>
///
/// </summary>
public class RabbitMqFanoutReceiveHelper : RabbitMqHelper
{
public RabbitMqReceiveEventHandler OnReceiveEvent;
private IConnection conn;
private IModel channel;
private EventingBasicConsumer consumer;
public bool StartReceiveMsg(string queueName)
{
try
{
conn = GetConnection("/Alan.hsiang");
channel = conn.CreateModel();
channel.ExchangeDeclare(exchange: "amq.fanout", type: ExchangeType.Fanout,durable:true);
//
//var queueName = channel.QueueDeclare().QueueName;
channel.QueueBind(queue: queueName, exchange: "amq.fanout", routingKey: "");
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(queueName+"::"+message);
}
};
channel.BasicConsume(queue: queueName,
autoAck: true,
consumer: consumer);
return true;
}
catch (Exception ex)
{
throw ex;
}
}
}
저자:Alan.hsiang출처:http://www.cnblogs.com/hsiang/
이상 은 C\#RabbitMQ 로 메시지 구독 과 발 표를 실현 하 는 상세 한 내용 입 니 다.C\#RabbitMQ 로 메시지 구독 과 발 표를 실현 하 는 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.