- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序在 Tomcat 下运行,多个 Spring 的 DefaultMessageListenerContainer
监听在 Oracle 11g Weblogic 服务器下运行的多个不同的 JMS 队列。
DefaultMessageListenerContainer
配置是..嗯..默认为 sessionTransacted = false
和 sessionAcknowledgeMode = AUTO_ACKNOWLEDGE
。我的应用程序收到的消息类型是 javax.jms.TextMessage
。消息的实际主体 (message.getText()
) 是一个 XML 字符串。
当多个应用程序实例(开发盒、测试盒等)需要指向同一个 JMS 服务器时,我遇到了一个问题,因此一旦消息进入队列,就不知道哪个服务器将使用它(我相信首先运行 receive()
方法的那个)。问题是任何给定的应用程序实例只对专用于该特定应用程序实例的消息感兴趣,因此在当前配置下,大多数消息都会丢失(由其他应用程序实例使用并在消息处理业务逻辑中被忽略)。
我无法控制 JMS 服务器的实现,但我可以强制它在消息正文中将特定的 XML 元素设置为应用程序实例特定的值,这样我就可以读取它并决定哪个应用程序实例应该使用它。
最自然的方法是在 DefaultMessageListenerContainer
上设置 messageSelector
属性,以便在 JMS 服务器上做出哪个消费者应该接收什么消息的决定。我还了解了与 XML 消息类型一起使用的 Weblogic 特定 JMS_BEA_SELECT
消息选择器表达式。不幸的是,它似乎不适用于带有 XML 有效负载的 javax.jms.TextMessage
消息(或者至少我无法让它工作)。我正在尝试以下表达式但没有运气:
<property name="messageSelector" value="JMS_BEA_SELECT('xpath', '//Event/CorrelationID/text()') = 'MY_SELECTOR_TEST_3'"/>
根据 this article其他选项是:
我知道我需要将 DefaultMessageListenerContainer
上的 sessionTransacted
和 sessionAcknowledgeMode
设置为非默认值(什么值?),然后回滚消息处理器代码中的 session (选项 1)或不调用 message.acknowledge()
(选项 2)。
看起来 DefaultMessageListenerContainer
控制消息处理/ session 生命周期。如何自定义它?
最佳答案
带有回滚的解决方案看起来很奇怪。设置消息选择器应该就足够了。我没有使用 BEA JMS 实现,但我想您可以注意常规的“SELECT”并从 header 中选择。
<property name="messageSelector" value="CorrelationID='MY_SELECTOR_TEST_3'/>
您是否在通信点(服务器、客户端)的两端工作以控制关联 ID?
关于java - JMS TextMessage、JMS_BEA_SELECT 消息选择器、事务处理 session 和确认模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7102641/
正如我们所知,多数组如 int array1[3][2] = {{0, 1}, {2, 3}, {4, 5}};是连续的,所以它与 int array2[6] = { 0, 1, 2, 3, 4, 5
构造 TextMessage 的最佳方法是什么?来自单元测试中的字符串? 我只看到Session#createTextMessage(String) ,但这需要一个需要进行一些设置的 session
我使用 QueueBrowser 获取并循环访问 JMS 队列上的消息枚举。当我尝试将 msgs.nextElement() 转换为 TextMessage 时,IntelliJ IDEA 告诉我:
在我看来就像 JMS TextMessage包含 Java.lang.String 不会将 \r\n 识别为换行符,而是将 CR LF 视为 Windows 计算机上输入的一部分。 @Override
将我的应用程序从 OC4J 迁移到 WebLogic 10.3.6 服务器后,我遇到了一个奇怪的问题。 我的应用程序将 JMS TextMessage 生成到 OracleAQ 队列中。它工作正常。但
我正在 TextMessage 上设置 Long 属性 msg.setLongProperty("publishSequence", pubSeq); ,并将其发送到本地 IBM WebSphere
我正在构建一些 MQ 队列连接,我需要将消息队列从 queueReceiver.Receivenowait() 转换为 JMS Textmessage。 因为 queueReceiver.Receiv
我有一个在队列上设置监听器的 Java 应用程序,onMessage(Message) 获取 javax.jms.TextMessage 的子类,我该如何制作它获取javax.jms.BytesMes
调用 MessageProducer.setTimeToLive() 与调用 TextMessage.setJMSExpiration() 有区别吗? 我可以从文档中看到 javax.jms.Mess
本文整理了Java中org.springframework.web.reactive.socket.WebSocketSession.textMessage()方法的一些代码示例,展示了WebSock
我正在使用 Spring JMS @JmsListener 注释收听 MQ Q。 @JmsListener(destination = "${qNmae}",
Oracle 文档说 - A TextMessage object is used to send a message containing a java.lang.String. It inheri
我的应用程序在 Tomcat 下运行,多个 Spring 的 DefaultMessageListenerContainer 监听在 Oracle 11g Weblogic 服务器下运行的多个不同的
当我使用 PHP-Stomp 向 ActiveMQ 发送消息时消息作为 BytesMessage 发送。但是我想发送一条 TextMessage。 根据STOMP documentation这可以通过
我在版本 5 或更高版本的 iOS 应用程序上使用 ShareKit 2。我已将应用配置为正确使用 Facebook,当操作表被激活时,这是唯一出现的选项。我想使用内置的 Twitter 共享系统,但
我正在尝试通过 azure 服务总线使用 amqp 将简单的字符串消息从 .NET 发送到 Java 客户端。根据documentation我应该能够发送这样的代理消息: message = new
我正在从 Java 代码向 Websphere MQ Server 发送消息,当我在 MQ 服务器上读取相同的消息时,它显示为: message 下面是将消息发送到MQ服务器的代码: private
我的 Spring Boot 应用程序在从 ActiveMQ 代理检索 TextMessage 类型的 JMS 消息时遇到问题。 如果消费者尝试从代理检索消息,它无法自动将消息转换为 TextMess
我在网上发现了一些非常矛盾的信息,我认为每个不同的 JMS 提供者也可能会改变答案。 我试图了解在将 XML 发送到 JMS 系统(例如 ActiveMQ)时我是否应该使用 BytesMessage
我需要连接到不同数据库中的两个 Oracle AQ 队列。当然,除了连接字符串之外,我在这两种情况下都使用完全相同的代码。其中一个队列工作正常,但第二个队列不行。 String db_string =
我是一名优秀的程序员,十分优秀!