SimpMessageHeaderAccessor与StompHeaderAccessor Spring + java之间的主要区别是什么?

时间:2017-09-10 08:41:32

标签: java spring stomp

SimpMessageHeaderAccessor与StompHeaderAccessor Web Socket Spring之间的主要区别是什么?

如果你知道这件事,请详细解释一下吗?

3 个答案:

答案 0 :(得分:1)

这有一个简单的答案:SimpMessageHeaderAccessorStompHeaderAccessor的父级。

也就是说,StompHeaderAccessor专门用于STOMP头,而SimpMessageHeaderAccessor用于所有消息传递协议头,包括STOMP。

STOMP是一种较简单的消息传递协议类型 - 它基于文本,使其与HTTP的工作方式类似,并允许使用多种语言和平台进行通信。但它不能用于排队和主题。

进一步阅读:

  1. http://jmesnil.net/stomp-websocket/doc/
  2. https://blogs.vmware.com/vfabric/2013/02/choosing-your-messaging-protocol-amqp-mqtt-or-stomp.html

答案 1 :(得分:0)

了解STOMP协议,其设计和格式以更好地理解API和classes相关非常重要。

STOMP的可互操作线路格式允许客户端与多个消息代理进行通信。由于其语言不可知,以不同语言开发的客户和经纪人可以相互发送和接收消息。

STOMP complient消息代理是here

STOMP是基于文本的,不使用二进制协议。它支持一系列核心企业消息传递功能,例如身份验证,P2P和DSP等消息传递模型。发布和订阅,消息确认,交易,消息标题和属性等,

因此,当您使用Spring Messaging框架构建客户端和服务器端消息传递平台和应用程序时,包org.springframework.messaging.simp对简单消息协议具有通用支持,STOMP就是其中之一。

作为StompHeaderAccessor的基类,可以将SimpMessageHeaderAccessor用于通用邮件标头属性,并将StompHeaderAccessor用于STOMP特定属性,例如ContentLengthcreateForHeartbeat()isHeartbeat()等,以及updateStompCommandAsClientMessage()updateStompCommandAsServerMessage()wrap(Message<?> message)等STOMP消息传递API特定方法。

可以找到使用StompHeaderAccessor的好例子here。 这个blog中提供了使用SimpMessageHeaderAccessor和StompHeaderAccessor的良好工作示例。

答案 2 :(得分:-1)

我从未使用过Web Socket Spring,但我会尽力帮助。

<强> SimpMessageHeaderAccessor: 用于在支持基本消息传递模式的简单消息传递协议中处理消息头的基类。提供对跨协议通用的特定值的统一访问,例如目标,消息类型(例如发布,订阅等),会话ID等。 使用此类中的一个静态工厂方法,然后调用getter和setter,最后在必要时调用MessageHeaderAccessor.toMap()以获取更新的头文件。

StompHeaderAccessor:从解码的STOMP帧创建消息时或将消息编码为STOMP帧时使用的MessageHeaderAccessor。 当从STOMP帧内容创建时,实际的STOMP头存储在由父类NativeMessageHeaderAccessor管理的本机头子图中,而父类SimpMessageHeaderAccessor管理公共处理头,其中一些基于STOMP头(例如目的地,内容类型)等等。)

也可以通过包装现有Message来创建此类的实例。该消息可能是使用更通用的SimpMessageHeaderAccessor创建的,在这种情况下,STOMP头是从公共处理头创建的。在这种情况下,如果发送消息并且根据消息是发送到客户端还是消息代理,还需要调用updateStompCommandAsClientMessage()或updateStompCommandAsServerMessage()。

我可以做到的是,它似乎用于从解码的消息帧创建消息的任何类型的HeaderAccessor,此外,它用于将消息编码为协议帧,STOMP或其他。它们似乎与HTTP标头不同,因为您可以通过以下方式向它们添加参数。

SimpMessageHeaderAccessor accessor = 
SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE);
    accessor.setHeader("foo", "bar");
    accessor.setNativeHeader("fooNative", "barNative");
    accessor.setLeaveMutable(true);

    MessageHeaders headers = accessor.getMessageHeaders();

有关WebSockets的更多信息,请访问:From Zero to Hero with Spring WebSocketDeep dive into Spring WebSockets

我希望你的解释得到你的帮助,祝你有个美好的一天。