首页 新闻 搜索 专区 学院

消息队列RabbitMq 使用easynetq的问题

0
悬赏园豆:20 [已解决问题] 解决于 2016-12-18 11:59

1.在获取消息队列时有两种方式

同步方式

bus.Subscribe<Message>(msg.MessageRouter, message => ipro.ProcessMsg(message), x => x.WithTopic(msg.MessageRouter))

异步方式

bus.SubscribeAsync<Message>(msg.MessageRouter, message => Task.Factory.StartNew(() => ipro.ProcessMsg(message)), x => x.WithTopic(msg.MessageRouter));

执行后都会调用ProcessMsg方法

我的问题是使用同步方式较好还是异步较好

用异步的话如果数据量比较大,会不会同时处理会消耗内存较高

还有队列是先进先出,异步的话处理会不会乱

 

2.在RabbitMq中有代码

channel.BasicAck(ea.DeliveryTag, false);

是通知删除消息

而在easynetq中是怎么怎么一种机制实现这功能的

 

3.我在客户端发了一个消息到队列,怎么才能知道处理结果

  如:我下单信息发送到队列,怎么知道是否下单操作成功

余粮的主页 余粮 | 初学一级 | 园豆:37
提问于:2016-12-14 23:25
< >
分享
最佳答案
0

m没有看过你bus这个代码是怎么封装的不清楚。但是rabbitmq还是了解一些,接收/处理消息。他本身就是异步的。

没必要Task.Factory.StartNew了。这个地方反而多了线程的调用和切换。

channel.什么来着,可以设置处理消息的并发数量的。由此可见rabbitmq这一块就是自己有线程池的。所以多此一举。

还有叫rabbitmq。不是rubbitmq

收获园豆:20
czd890 | 大侠五级 |园豆:9469 | 2016-12-14 23:51

2没法回答你,没用过。

1.不需要再次异步,且消息本身并发处理不能保证顺序。如果要保证按照发送顺序处理,可以设置channel.BasicQos保证并发处理为1.

3.rabbitmq有远程rpc模式。

czd890 | 园豆:9469 (大侠五级) | 2016-12-15 10:19
其他回答(1)
0

你的问题解决了吗?easynetq怎么确认消息?

迷路中的路人甲 | 园豆:93 (初学一级) | 2017-02-23 10:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册