"टिकाऊ" और "लगातार मोड" संदेश प्राप्त करने के लिए कोई ग्राहक होने के बजाय रीबूट से संबंधित प्रतीत होता है।कोई ग्राहक के साथ RabbitMQ कतार
मुझे कोई ग्राहक नहीं होने पर रब्बीएमक्यू को कतार पर संदेश रखने की इच्छा है। जब कोई ग्राहक ऑनलाइन आ जाता है, तो संदेश उस ग्राहक द्वारा प्राप्त किया जाना चाहिए। क्या यह RabbitMQ के साथ संभव है?
कोड का नमूना:
सर्वर:
namespace RabbitEg
{
class Program
{
private const string EXCHANGE_NAME = "helloworld";
static void Main(string[] args)
{
ConnectionFactory cnFactory = new RabbitMQ.Client.ConnectionFactory() { HostName = "localhost" };
using (IConnection cn = cnFactory.CreateConnection())
{
using (IModel channel = cn.CreateModel())
{
//channel.ExchangeDelete(EXCHANGE_NAME);
channel.ExchangeDeclare(EXCHANGE_NAME, "direct", true);
//channel.BasicReturn += new BasicReturnEventHandler(channel_BasicReturn);
for (int i = 0; i < 100; i++)
{
byte[] payLoad = Encoding.ASCII.GetBytes("hello world _ " + i);
IBasicProperties channelProps = channel.CreateBasicProperties();
channelProps.SetPersistent(true);
channel.BasicPublish(EXCHANGE_NAME, "routekey_helloworld", false, false, channelProps, payLoad);
Console.WriteLine("Sent Message " + i);
System.Threading.Thread.Sleep(25);
}
Console.ReadLine();
}
}
}
}
}
ग्राहक:
namespace RabbitListener
{
class Program
{
private const string EXCHANGE_NAME = "helloworld";
static void Main(string[] args)
{
ConnectionFactory cnFactory = new ConnectionFactory() { HostName = "localhost" };
using (IConnection cn = cnFactory.CreateConnection())
{
using (IModel channel = cn.CreateModel())
{
channel.ExchangeDeclare(EXCHANGE_NAME, "direct", true);
string queueName = channel.QueueDeclare("myQueue", true, false, false, null);
channel.QueueBind(queueName, EXCHANGE_NAME, "routekey_helloworld");
Console.WriteLine("Waiting for messages");
QueueingBasicConsumer consumer = new QueueingBasicConsumer(channel);
channel.BasicConsume(queueName, true, consumer);
while (true)
{
BasicDeliverEventArgs e = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
Console.WriteLine(Encoding.ASCII.GetString(e.Body));
}
}
}
}
}
}
धन्यवाद, मैंने यह कोशिश की है लेकिन अगर कोई ग्राहक सुन रहा है तो यह अभी भी संदेश जारी नहीं रखता है। प्रश्न से जुड़ा कोड नमूना। –
अच्छा कोड। दो समस्याएं: 1) सर्वर * कतार घोषित करना चाहिए; इसे दो बार घोषित करना कोई समस्या नहीं है और यह अच्छी प्रथा है और 2) queueDeclare() आपको एक अज्ञात गैर-टिकाऊ कतार देता है; आप queueDeclare ("myQueue", सच, झूठी, झूठी, शून्य) चाहते हैं। – scvalex
इसके अलावा, जिस तरह से आपने प्रश्न संपादित किया है, उसे समझना मुश्किल हो जाता है कि आप क्या हासिल करने की कोशिश कर रहे हैं। – scvalex