2016-11-24 5 views
0

Мы хотим использовать delay feature from activeMQ для того, чтобы отсрочить конкретное событие. Как работает AMQ_SCHEDULED_DELAY? В документации есть информация о планировщике, но нет информации о том, какой механизм он использует для задержки сообщения. По этой причине мы не уверены, что отсрочка повлияет на activeMQ. Использует ли activeMQ объединение или асинхронный доступ к достижимой задержке.Как работает сообщение ActiveMQ AMQ_SCHEDULED_DELAY?

Я задаю этот вопрос, потому что люди из моей организации хотят выбрать другую технологию. У меня нет каких-либо доказательств задержки с activeMQ лучше.

Here является ссылкой на исходный код. Я думал о поиске кода, но я не очень хорошо разбираюсь в java. Может ли кто-нибудь помочь?

ответ

1

Можно выполнить тест производительности с помощью web-консоли activemq. Существует возможность отправить сообщение с настраиваемой задержкой и количеством отправляемых сообщений. Это не отвечает на мой вопрос, но кажется лучшим вариантом сравнить два подхода.

1

Реализация ActiveMQ по умолчанию использует опрос.

Active MQ внутренне проводит опрос для запланированных (или отложенных) сообщений потоком планировщика фона. Этот поток читает список запланированных событий (или сообщений) и запускает задания, перенаправляет повторяющиеся задания по мере необходимости, прежде чем запускать задание.

Список запланированных событий хранится в отсортированном порядке во внутреннем хранилище activeemq. Поэтому во время опроса он просто считывает событие, которое запланировано для самой ранней обработки. Поскольку сообщения сохраняются во время регистрации, планирование во многих случаях не оказывает заметного влияния на производительность.

Однако, прежде чем принимать, вы можете настроить свой бенчмарк, не беспокоясь о внутренней внутренней детали реализации, чтобы убедиться, что требования к производительности/SLA удовлетворяются.

Для получения дополнительной информации вы можете обратиться к Javadoc API планировщика заданий. Для реализации по умолчанию вы можете ссылаться на the code.

Надеюсь, это поможет.

+0

Благодарим вас за то, что вы узнали код, отвечающий за эту функцию. Кажется, это похоже на асинк, как Стив указал –

1

Рассматривая исходный код, упомянутый @skadya, термин «опрос» не является тем, что я интерпретирую. По-видимому, используется класс Java Object 'wait (long timeout) метод определения, когда «просыпаться» поток, выполняющий задания.

Итак, я бы не назвал это опросом. Я бы назвал его асинхронным механизмом, в котором установлен задержка/таймаут, чтобы поток проснулся (например, для запуска следующего запланированного задания в соответствующее время) через тайм-аут, установленный на значение, подходящее для следующего запланированного задания начало.

Javadoc для Object.wait(long timeout)

Следует отметить, что реализация для Object.wait является родным (т.е. не-Java) осуществление обеспечивается JDK/JRE/JVM для данной платформы. За что это стоит.

+0

Я не очень хорош в java, но мне кажется, что вы правы. –