msmq不支持这种模式,但msmq支持分布式事务。msmq性能上一般,但一般用用也就那样。
其他amqp协议的mq有rabbitmq,activemq,rocketmq等
有些比较有特点的比如redis,zeromq,zookeeper,kafka这些,第一个虽说做cache但也有mq这种特性,第二个就是极端追求性能但无法数据安全性的,zookeeper那个由于本身就是在分布式环境中做信息同步的,所以也有这个技能点;kafka还没怎么接触过,但这个最好也了解下。
如果你学mq我建议从rabbitmq开始,这个比较友好,很多地方都可以通过界面配配就出来了,而且功能也强大,msmq相对而言就黯淡很多了。
多线程从队列里取数据,结果会是 多个线程加起来的数据等于队列中的数据,msmq 取一个少一个 怎么解决这个问题
@liyanzhao: 没太明白,q本身就是dequeue一个少一个,管你有几个消费者,你如果不想让数据被从queue中删掉,那只能peek/nack(amqp)(但多个消费者同时peek会拿到重复的数据)
@Daniel Cai: 从队列中取到数据发给多个消费者,可以理解成 一个发布者 多个订阅者, 订阅者收到消息 队列中就删除
@liyanzhao: 那你的问题呢?
@Daniel Cai: 比如说有一个队列 里面有 1 2 3 4 5 开两个线程从队列中取数 ,结果是一个线程 取到的是1 3 5 而另一个线程取到的是 2 4 怎么让两个线程都取到 1 2 3 4 5 。 或者是刚开始有一个线程正在从队列里面取数 当取到 2 的时候 另一个线程加入进来, 向要的结果是 第一个线程 取到 1 2 3 4 5 第二个线程取到 3 4 5
@liyanzhao: msmq不行,其他有些可以做到
比如rabbitmq中的exchange设定为fanout,通过代码完成queue的建立及对这个exchange的绑定过程,一旦完成则所有通过这个exchange过来的消息将会分发到其下所有绑定的队列。
@Daniel Cai: 好的 ,这块需要好好花时间学习,谢谢你这么耐心的解答。嘿嘿。
rabbitmq只支持.net 4.5 以上的项目吗?
@liyanzhao: 没这种说法。我这边也有3.5的用这个的。
消息队列的本质就是发布/订阅
MSMQ比较弱,学RabbitMQ吧
http://git.oschina.net/lishilei0523/WCF-RabbitMQ