Я не очень понимаю, как увязать то, что пара тысяч обработчиков вебсокет-соединений будет раз в N времени ходить в базу проверить, не появились ли новые данные. Поэтому и был вопрос про связующее звено для всех потребителей
Хм. Вы предлагаете хранить коннекты к вебсокету в списке (добавляя при присоединении и убирая при отсоединении), и когда приходит событие, обходить их аля "кому подходит, тому и отправлю"?
Зачем в списке? В мапе по имени пользователя, для которого сообщение. Получаешь сообщение из очереди в базе, смотришь адресата, отправляешь в его сокет сообщение - все.
В базе у тебя таблица queues(reciever,..) online(reciever) ты перед skip locked их джойнишь, что бы из "неонлайн" очередей ничего не забирать. И все получается очень просто и надежно