我们为基本的兔子mq队列做了R& D确认。我们现在想要更进一步,使用类似路由键的东西按用户名分割频道。 (https://www.cloudamqp.com/blog/2015-09-03-part4-rabbitmq-for-beginners-exchanges-routing-keys-bindings.html)。
但是我们要求每个用户使用自定义排序,我们从上游获得的json有一个名为while true; do
read pid < process_done_fifo
if [ $pid = $pid_you_are_waiting_for ]; then
break
fi
done
的参数。将数据推送到rabbitmq的服务可能会从上游获取序列号为protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
try
{
SetContentView(Resource.Layout.Main);
architectView = FindViewById<ArchitectView>(Resource.Id.architectView);
var config = new ArchitectStartupConfiguration();
config.setLicenseKey(WIKITUDE_SDK_KEY);
architectView.OnCreate(config);
}
catch (Exception ex) { Toast.MakeText(this, ex.ToString(), ToastLength.Long); }
}
protected override void OnPostCreate(Bundle savedInstanceState)
{
base.OnPostCreate(savedInstanceState);
if (architectView != null)
architectView.OnPostCreate();
try
{
try
{
string url = string.Format(@"file:///android_asset/01_ImageRecognition_1_ImageOnTarget/index.html");
architectView.Load(url);
Plugin01 cardPlugin = new Plugin01("com.plugin.dpiar");
architectView.RegisterPlugin(cardPlugin);
}
catch (Exception ex) { }
}
catch (Exception ex) { Toast.MakeText(this, ex.ToString(), ToastLength.Long); }
}
的第一个json,然后获取sequence
。是否有一种方法可以将带有2
数字1
的json推送到队列中,但只有在队列收到带有seuqence
的json并交付后才能传送它。
基本上我们想知道的是,是否有一种方法可以在rabbitmq上使用自定义排序来基于此2
参数进行消息传递,而无需使用单独的服务来维护此顺序。
答案 0 :(得分:1)
基本上我们想知道的是,是否有一种方法可以在rabbitmq上使用自定义排序来基于此序列参数进行消息传递,而无需使用单独的服务来维护此顺序。
没有。见https://www.rabbitmq.com/semantics.html:
从RabbitMQ版本2.7.0开始,即使存在重新排队或频道关闭,消息也始终按发布顺序保存在队列中。
所以看起来你的用例并不容易支持。
当然,如果您真的想要重新排队(并且您不想在消费者处留言),您可以为您的消费者实现类似此伪代码的内容:
expected_message_id = 0
while (true) {
m = receive_message(queue)
if (m.id == expected_message_id) {
process(m)
m.acknowledge()
expected_message_id++
} else {
republish_to_queue(m, queue) // might use old exchange, or pick a new-one for this type of back-channel
}
}
显然,这意味着您需要额外的网络/处理负载 - 消息可能会被多次传送和丢弃。