消息传递
XMS 支持消息传递的持久和非持久方式,以及消息的异步和同步传递。
消息传递方式
- 持久
- 持久消息都会传递一次。 消息传递服务器会采取特殊的预防措施(例如,记录消息),以确保在传输过程中不会丢失持久消息,即使在发生故障的情况下也是如此。
- 非持久
- 非持久消息最多传递一次。 与持久消息相比,非持久消息的可靠性差一些,因为可能由于发生故障而导致在传输过程中丢失非持久消息。
可通过权衡可靠性与性能来选择合适的传递方式。 通常,非持久消息比持久消息传输得更快。
异步消息传递
XMS 使用一个线程来处理会话的所有异步消息传递。 这意味着每次只能运行一个消息侦听器函数或一个 onMessage() 方法。
如果会话中的多个消息使用者正在异步接收消息,并且消息侦听器函数或 onMessage() 方法正在将消息传递给某个消息使用者,那么等待同一消息的其他消息使用者必须继续等待。 等待传递给会话的其他消息也必须继续等待。
如果应用程序需要并行传递消息,请创建多个会话,以便 XMS 使用多个线程来处理异步消息传递。 通过使用这种方式,可同时运行多个消息侦听器函数或 onMessage() 方法。
无法通过将消息侦听器分配给使用者来使会话异步。 只有在调用 Connection.Start 方法时,才能使会话异步。 在调用 Connection.Start 方法之前,允许所有同步调用。 在调用 Connection.Start 时,会开始将消息传递给使用者。
如果必须在异步会话上进行同步调用 (例如,创建使用者或生产者) ,那么必须调用 Connection.Stop 。 可以通过调用 Connection.Start 方法来恢复会话,以开始传递消息。 这里的唯一例外情况是 Session 消息传递线程(即将消息传递到回调函数的线程)。 这个线程可以在消息回调函数中对会话发出任何调用(Close 调用除外)。
MessageListener 方法外创建和处置会话。同步消息传递
如果应用程序使用 MessageConsumer 对象的 Receive 方法,那么会将消息同步传递到该应用程序。
通过使用 Receive 方法,应用程序可以在指定的时间段内等待消息,也可以无限期地等待。 或者,如果应用程序不想等待消息,那么可以使用“Receive with No Wait”方法。