问题标签 [spring-messaging]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何使用 Spring WebSocket 向 STOMP 客户端发送错误消息?
我正在使用 Spring 的 STOMP over WebSocket 实现和功能齐全的 ActiveMQ 代理。当用户SUBSCRIBE
访问某个主题时,他们必须通过一些权限逻辑才能成功订阅。我正在使用 ChannelInterceptor 应用权限逻辑,如下配置:
WebSocketConfig.java:
WebSocketSecurityConfig.java:
MySubscriptionInterceptor.java:
当没有足够权限的客户端尝试订阅受限主题时,他们实际上从未收到来自该主题的任何消息,但也不会收到有关引发拒绝其订阅的异常的通知。相反,客户端会收到 ActiveMQ 代理一无所知的死订阅。(正常的、获得充分许可的客户端与 STOMP 端点和主题的交互按预期工作。)
在成功连接后,我尝试订阅users/{subscribingUsername}/queue/errors
并简单users/queue/errors
地使用我的 Java 测试客户端,但到目前为止,我一直无法从传递给客户端的服务器获取有关订阅异常的错误消息。这显然不太理想,因为从来没有通知客户他们已被拒绝访问。
spring - 在 Spring websockets 中发送错误消息
我正在尝试使用 STOMP over SockJS 在 Spring websockets 中发送错误消息。
我基本上是在努力实现这里正在做的事情。
这是我的异常处理程序
我正在订阅
在我的情况下,用户未经过身份验证,但从这里开始
虽然用户目的地通常意味着经过身份验证的用户,但这并不是严格要求的。未与经过身份验证的用户关联的 WebSocket 会话可以订阅用户目的地。在这种情况下,@SendToUser 注释的行为与使用广播 = false 时完全相同,即仅针对发送正在处理的消息的会话。
当我抛出这个错误时,所有这一切都很好,myHandler
这是我在 websocket 配置中定义的 Websocket 处理程序。
我有一个ClientInboundChannelInterceptor
which extendsChannelInterceptorAdapter
拦截preSend
.
如果此拦截器出现任何异常,我想将其扔回发送此消息的用户会话,
@MessageExceptionHandler
没有捕捉到这个异常。所以我尝试使用simpMessagingTemplate
.
我基本上想做:
SOMETHING应该是正确的用户名,但在我的情况下用户没有经过身份验证,所以我不能使用headerAccessor.getUser().getName()
我什至尝试过
但这不起作用。
我什至尝试headerAccessor.getSessionId()
过代替用户名,但这似乎不起作用。
这样做的正确方法是什么?
我应该使用什么作为用户名convertAndSendToUser
?
javascript - 无法使用 Spring 消息传递通过 stomp 发送消息
我正在尝试使用 spring-messaging 通过 STOPM 从浏览器发送和处理消息。但是没有发送消息。
现在一些代码:
如您所见,我正在使用嵌入式弹簧简单代理。
当我尝试在 Firefox 中调试脚本部分时,调试永远不会到达部分:
也许stomp无法连接?
stomp 和 sock 对象被正确创建。
当我调用 doSmth() 函数并尝试断点 handleShout(Shout incoming) 函数时,我无法捕获该断点。函数永远不会被调用。
你知道我在做什么错吗?
spring-boot - 如何在 application.properties 上为 Spring Boot Artemis 配置 SSL、用户名和密码?
我使用的是 Spring Boot 1.3.1,我可以通过 application.properties 自动配置我的 JMS 组件。
当我使用 Artemis 作为我的消息代理时,我使用的是 spring-boot-starter-artemis,并且正如此链接中的文档所述,我所要做的就是替换 spring.hornetq.* 属性并放置 spring. artemis.* 代替。
问题是它没有显示如何为 HornetQ/Artemis 配置用户名、密码和 SSL 配置。我将 Artemis 配置为使用 SSL 和用户/通过身份验证,如此处所示。
有谁知道我可以声明哪些属性来添加 SSL 和用户/密码?
谢谢!
java - Active MQ 识别 ActiveMQ 队列的地址
这是我用于接收消息的 POJO 类。我可以通过 JCONSOLE 在此处发送消息,但是,如果我有另一个应用程序需要向此侦听器/队列发送消息怎么办?我将如何识别地址?这是通过 spring-boot 自动配置的。我只指定了activemq jar。
spring - 使用 Spring 的两个 java 类之间的通信
我有两个在同一个应用程序中实现 Runnable 的 java 类,比如说 A 类和 B 类。
这两个类共享一个 BlockingQueue 来传递一些数据。A类通过BlockingQueue向B类发送数据。然后 B 类获取数据并进行处理。我想要做的是,当由于处理这些数据而在 B 类中发生某些情况时,它会向 A 类发送一条消息,然后 A 类打印这些消息。
所以我正在查看使用 Apache ActiveMQ 的 Spring 消息传递,但似乎必须启动代理才能使用“activemq start”命令进行通信。如果没有启动此代理,是否有可能做到这一点?
这样做的最佳选择是什么?我想使用 Spring 框架来做到这一点,所以可以在 Spring 中使用某种方法来完成吗?或者使用spring的唯一可能性是通过apache activemq?
java - 使用 Spring 集成在同一应用程序中的两个类之间进行消息传递
我试图在同一个应用程序中将字符串消息从一个类传递到另一个类(从 Class1 到 Class2),所以我试图使用 Spring Integration 来解决它。
我的 context.xml 文件如下所示:
第一类:
类 2 类:
我遇到的问题:
如果我打开我的 context.xml 文件,context.xml 中的以下行标有叉号(错误):
无论如何,我可以构建和执行应用程序,但在运行时会出现一条异常消息,指出 int:poller 中不允许使用 fixe-delay。
另外,我的实现是否正确?我不确定在解决问题后评论它是否会起作用。对不起,我是春天的新手。
java - spring代理通道访问
我有几个问题,一是如何使用 spring websockets 和消息传递。所以我有一个与外部 Web 服务生产者端点接口的程序,它将数据有效负载发送到我的 Web 服务消费者端点。在我的程序的另一端,我会将这些数据负载路由到多个 websocket 连接(stomp 和 sockjs)。外部 Web 服务生产者在每个数据负载中为每个查询请求提供订阅 ID,因此我的方法是使用 SimpMessagingTemplate 将它们发送回代理,该模板具有它自己的唯一目的地(即 /user/{subscriptionId}/subscribe)。这样,如果进行了重复查询,我可以将每个 websocket 客户端订阅到现有目标,否则仅向外部 Web 服务生产者请求新的订阅。
如何从不同的组件(例如我的 Web 服务使用者)访问我的 SimpMessagingTemplate,以便我可以将数据有效负载发送到我的消息代理?我是否只是将我的 SimpMessagingTemplate 声明为静态并在存储模板对象的控制器中声明一个 getter 函数?
如何获取所有已知目的地的列表以及每个目的地的 stomp 客户端订阅者数量?外部 Web 服务生产者为每个订阅设置终止时间,所以如果目的地仍有订阅者,我想实现自动续订请求。我想我可以自己使用 Maps/Caches 跟踪它,并在每次打开或关闭 websocket 会话时更新它们,但我更喜欢使用 spring要做到这一点,需要诸如 RabbitMQ 或 ActiveMQ 之类的特色代理。
java - Spring 用户目的地
我有一个 Spring Boot 应用程序,它将发布到用户定义的目标通道,如下所示:
然后 Stomp over SockJS 客户端可以订阅它并接收消息。假设我在我的 spring 应用程序中注册了一个名为“/data”的 stomp 端点
实际上会有不止一个用户客户端订阅同一个不同的用户目的地,所以每个发布/订阅通道不是一对一的,我只是这样做,因为 spring 的“/topic”概念必须以编程方式定义,并且“/queues”只能由一个用户使用。我如何知道用户目的地何时不再有任何订阅者?以及如何删除用户目的地?
java - 如何将弹簧表单输入占位符属性值引用到消息源属性?
是否可以使用弹簧标签(弹簧形式标签库,用于数据绑定)中的标签(弹簧标签库)从.properties
消息文件中检索消息。spring:message
form:input
src/main/resources > texts.properties(文件)
src/main/webapp/WIN-INF/JSP > test.jsp
如果我尝试这样做:
结果我得到了<spring:message code="testEntry">
一个占位符而不是Test entry
如果我尝试这样做:
我得到相同的结果。我明白这个问题。但是在 JSP 中是否有另一种方法可以使带有适当代码的消息显示为 spring-form 标记的属性值?