Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 发送即时JMS消息,表示处理进度_Java_Jakarta Ee_Jms_Wildfly 8 - Fatal编程技术网

Java 发送即时JMS消息,表示处理进度

Java 发送即时JMS消息,表示处理进度,java,jakarta-ee,jms,wildfly-8,Java,Jakarta Ee,Jms,Wildfly 8,我使用JMS主题(对于非持久订户)向客户端报告服务器端处理的进度。应用服务器本身是WildFly 8.2,客户端是JavaFX应用程序 在服务器端处理的每个特定里程碑(比方说,每完成十分之一的工作)上,JMS消息都被发送到主题,客户机订阅到主题。其思想是,当接收到JMS消息时,可以使用它来驱动“进度条”前进 我的问题是,某种类型的缓冲(?)发生在系统中的某个地方,可能发生在服务器端。处理过程本身要长10到30秒,根据日志,消息被发送到队列的时间大致平均,1到3秒 然而,在客户端,整个消息组在非常

我使用JMS主题(对于非持久订户)向客户端报告服务器端处理的进度。应用服务器本身是WildFly 8.2,客户端是JavaFX应用程序

在服务器端处理的每个特定里程碑(比方说,每完成十分之一的工作)上,JMS消息都被发送到主题,客户机订阅到主题。其思想是,当接收到JMS消息时,可以使用它来驱动“进度条”前进

我的问题是,某种类型的缓冲(?)发生在系统中的某个地方,可能发生在服务器端。处理过程本身要长10到30秒,根据日志,消息被发送到队列的时间大致平均,1到3秒

然而,在客户端,整个消息组在非常短的时间内接收,通常在整个处理结束时,接收时间不超过0.5秒


如何使用JMS消息传递来表示实时进度?

正如我在评论中所写,Nicholas是对的。
事务属性必须设置为
TransactionAttributeType.REQUIRES\u NEW
。通过这种方式,消息传递bean可以立即发送JMS消息,而无需等待处理bean。

消息是否可以在与业务流程相同的事务上下文中发送?如果是这样,则在事务提交之前不会将它们分派给订阅服务器。我的处理bean和消息传递bean(负责发送进度消息)都有默认的事务注释(它们没有注释)。我应该在消息传递bean中使用REQUIRES_NEW吗?是的,听起来不错。如果它们都运行默认的REQUIRES,那么假设首先启动了处理bean,消息传递bean可能已注册到同一事务中,因此在事务提交之前,消息不会提供给使用者。通过使用REQUIRES_NEW注释消息传递bean,您将立即清除消息。尝试将jms设置为非事务性和自动确认。如果只有一个客户端需要查看进度,则使用队列而不是主题