Будут ли селекторы сообщений работать с методом receiveNowait() для синхронного процесса. он работает с методом Receive (), но хотел знать для ReceiveNoWait для IBM mq. Селектор сообщений добавлен при создании потребителя.
РЕДАКТИРОВАТЬ 1: Я протестировал с помощью метода receiveNowait(), и селектор не работает. Я не знаю, проблема в моем селекторе или методе Receivenowait. Ниже приведен селектор, который я использовал:
String messageSelector = "JMSTimestamp <= " + System.currentTimeMillis() - 180000;
receiver = (MessageConsumer) session.createConsumer(replyQueue, messageSelector);
это означает, что получатель должен получать только те сообщения, которые на 3 минуты старше текущего времени. Может кто разобрался в чем дело.
Обновлено еще раз: после полного тестирования я обнаружил, что проблема связана с селектором, каким может быть правильное использование JMSTimeStamp в выражении селектора?
JoshMc в центре знаний ничего нет, но не нашел ни одного примера по нему, так что сомневался. Я собираюсь попробовать это сейчас. Будет видно, работает или нет.
Как отметил @JustinBertram, я не вижу причин, по которым это не сработает.
Селектор не работает с ReceiveNoWait по результатам моего теста. Я обновлю код через некоторое время
Если вы используете receive() или receive(long), работает ли селектор так, как вы ожидаете?
нет, не работает, только что проверил. проблема с селектором. Мы не можем использовать JMSTimeStamp так, как я использовал
Привет, Харша, что касается первоначального вопроса, я думаю, что на него был дан ответ, правильно подумать, что нужно принять один из ответов. Что касается вашего «EDIT 2», удалите его из этого вопроса и откройте новый вопрос по этому вопросу, это сайт с одним вопросом и одним ответом, а не дискуссионный форум.




Я не могу конкретно говорить о реализации IBM MQ, но с точки зрения JMS в спецификации JMS нет ничего, что ограничивало бы использование селекторов с помощью receiveNoWait, поэтому я ожидаю, что это будет работать в любой совместимой реализации.
Я отредактировал свой вопрос, добавил код селектора, проверьте
receive(), receive(long timeout) и receiveNoWait() должны работать точно так же с точки зрения того, что доставляется. На самом деле несколько реализаций реализуют один, вызывая другой метод.
Я отредактировал свой вопрос, добавил код селектора, проверьте
вы когда-нибудь заставляли его работать с MQ JMS? Я пробовал, но не вижу, чтобы это работало. Может быть, ошибка в MQ JMS? У меня был такой вывод: селектор: JMSTimestamp < 1552325982237 JmsConsumer: ожидание сообщения.... получено: JMSTimestamp: 1552326165700
Да, это не работает, я также пробовал использовать оператор BETWEEN, он работает по-другому.
pepared Значение system.currnetTimeMillis() не обновляется при запуске селектора.
Здесь вы фиксируете «текущую» метку времени при инициализации селектора. Вы должны сделать запрос типа "endValidityDate <= (JMSTimestamp-24601000)" для вашего запроса (та же проблема, что и любой запрос SQL с фиксированными значениями вместо динамических).
...Ты это пробовал? Есть ли в центре знаний что-нибудь, что указывало бы на то, что это не сработает?