Сразу извиняюсь за не полную инфу по вопросу. Не знаю всех тонкостей библиотеки которая поставляет данные, собственно с ней и проблема при работе с RabbitMQ.
Библиотека поставляет биржевые данные. Порядок такой. 1. Подписываюсь на финансовый инструмент(их больше 300) 2. Получаю успешно данные 3. Отправляю по RabbitMQ получателю.
Данных по каждому фин. инструменту идет много(каждый принт на бирже). Все работает, приложение успевает, RabbitMQ справляется на ура. Вот как я это делаю.
void feed_OnStreamTrade(string symbol, int tradeFlags, object tradeConditions, byte tradeExchange, double tradePrice, int tradeSize, DateTime tradeDatetime)
{
//tradeconditions is an array of 4 bytes
byte[] tradeConditionsArray = (byte[])tradeConditions;
//create data string
string data = "Stream Trade: " + symbol + "; tradeFlags: " + tradeFlags + "," + tradeConditionsArray[0] + "-" + tradeConditionsArray[1] + "-" + tradeConditionsArray[2] + "-" + tradeConditionsArray[3] + "," +
tradeExchange + "; tradePrice:" + tradePrice + "; tradeSize:" + tradeSize + "; Time:" + tradeDatetime.ToString();
SendModel sendModel = new SendModel();
try
{
_printDictionary.TryGetValue(symbol.ToUpper(), out this._printModel);
_printModel.Symbol = symbol;
_printModel.TradePrice = tradePrice;
_printModel.TradeSize = tradeSize;
_printModel.LastTime = tradeDatetime;
_printModel.Type = 1;
sendModel.Type = "print";
sendModel.Print = _printModel;
_sender.Send(sendModel); // - отправка в кролик
}
catch
{
Console.WriteLine(data);
}
}
Это метод библиотеки и сюда автоматом вываливаются все принты инструментов, на которые я подписался. Идут они примерно в секунду по 50-200 штук в общем и со всеми норм справляется RabbitMQ. RabbitMQ ставит их в очередь и отправляет. Именно для очереди я и брал кролика.
но каждые 5 мин я делаю запрос на еще одни данные в этом классе(в это время принты по первому методу продолжают строчить)
int requestId = ActiveTickFeed.feed.SendBarHistoryRequest(ticker, (short)ActiveTickFeedLib.ATBarHistoryEnum.ATBarHistoryIntraday, 5, DateTime.Now - TimeSpan.FromDays(1), DateTime.Now);
И они должны прийти в другой метод. Вот этот.
void feed_OnBarHistoryResponse(int originalRequestId, short barHistoryResponseCode, string symbol, short symbolStatusCode, object records)
И тут возникает проблема. Метод просто не реагирует и печатает в консоль
request 9887 timeout
И таких печатей по каждому запросу для вторых данных.
Если в первом методе я закоментирую отправку в кролика и просто буду выводить в консоль, то тогда норм работает. Хз как но раббит блочит возможность мне принимать данные со второго метода.
//_sender.Send(sendModel); // - отправка в кролик
Console.WriteLine(data);
Вот так данные с первого метода продолжают приходить и данные со второго метода не блокируются. Т.е. причина в _sender
Вот метод _sender()
public void Send(SendModel print)
{
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "hello",
durable: false,
exclusive: false,
autoDelete: false,
arguments: null);
byte[] messageBody = print.ToByteArray();
channel.BasicPublish(exchange: "",
routingKey: "hello",
basicProperties: null,
body: messageBody);
}
}
Как разрешить эту проблему. Пытался каждый _sender обернуть в Task.Run вот так, не помогло
var task = Task.Factory.StartNew(() =>
{
_sender.Send(sendModel);
});
task.Wait();
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
подскажите как получить реквизиты компаний по ИННСведения о контрагентах есть в ЕГРИП, ЕГРЮЛ
Я пытаюсь загрузить картинку в альбом сообществаДля этого я использую 3 шага
Я хочу вывести месяц, но что-то идёт не так и $month возвращает NULL $cat['pubdate'] - тут я получаю строку в виде 2019-12-18 12:11:57 $monthIndex = intval($monthIndex); - то что получил...