我是 Java 消息服务的新手,并不能完全确定它是如何工作的。我在 NetBeans 中将 JMS 与 Java EE 项目一起使用。我使用的服务器类型是 glassfish 3。这是我的情况:
我有一个创建两个线程 A 和 B 的程序。这两个线程通过我创建的两个队列服务器资源在彼此之间发送消息。下面是一系列假定在 A 和 B 之间传回和第四次传递的消息。
假设会发生什么:
1. A is started
2. B is started
3. A sends B a message, M1 ( producer.send(m1) )
4. B receives M1 and does some stuff ( consumer.receive() )
5. B sends A a message, M2
6. A receives M2 and does some stuff
7. A sends B a message, M3
8. B receives M3 and does some stuff
实际发生的情况:
1. A is started
2. B is started
3. B receives M3 and does some stuff ( consumer.receive() )
自从我在所有正在发送的消息之间的某个地方执行了 session.commit() 之后,这种情况就开始出现了。这几乎就像我将队列的状态提交给某个文件或服务器,现在每次我运行我的程序时,它都会从那个保存的状态初始化队列。
我首先添加提交的原因是因为我的一条消息 M2 没有被线程 A 接收。线程 B 到达了它的代码部分,它通过 producer.send(M2 将 M2 发送到线程 A )(其中 producer 是 MessageProducer 对象)。线程 A 只会挂在 consumer.receive() 上(其中 consumer 是 MessageConsumer 对象)。我仔细检查了是否将 M2 发送到正确的队列资源。