目标:在一次迭代中向所有订阅者发送大量消息。我有 40k-100k 条消息。我已经开始使用 PUB/SUB 套接字类型。
问题:订阅者收到的消息数低于发布者上发送的消息数。如果我在发送每条消息后添加一个 Thread.Sleep(1),那么所有消息都会被传递,但是需要传递的消息数量很多,这意味着 40-100 秒的延迟。这是不可接受的。
下面的代码在 NetMQ (3.0.0) 中,它是 alpha 版本,但这只是举例,因为我已经使用 libzmq 3.2.4(稳定版)在 c 中实现了相同的代码。和 simtoms 是一样的。
发布者/服务器端:
using (var dbConn = new OracleConnection(ConfigurationManager.AppSettings["ConnString"]))
using (NetMQContext ctx = NetMQContext.Create())
{
using (var publisher = ctx.CreatePublisherSocket())
{
publisher.Bind(ConfigurationManager.AppSettings["PubSocket"]);
dbConn.Open();
NetMQMessage m = new NetMQMessage();
while (true)
{
var updateIds = new List<int>();
var deletedIds = new List<int>();
var changedRules = GetChangedItems(dbConn, ref updateIds);
var deletedRules = GetDeletedItems(dbConn, ref deletedIds);
foreach (var kvPair in changedRules)
{
var item= …Run Code Online (Sandbox Code Playgroud)