在我的场景中,我希望用户订阅一个固定的websocketendpoint,并且在订阅时不需要提及队列名或主题。我想处理控制器内部的逻辑,以便从各自的队列中获取消息并将消息发送回每个用户。我想达到的目标是:-
我的客户端代码首先连接到websocketendpoint/websocket:-
client.connectToServer( aWebsocketHandler, URI.create( "wss://host.com/websocket" ) );
然后通过websocket发送STOMP connect and subscribe帧
STOMP connect frame :-
accept-version : 1.1
heart-beat : 100000,0
STOMP subscribe frame :-
destination : /app/fixed
id : 123
ack : auto
receipt : 123456
正在工作的服务器端代码控制器是:-
@SubscribeMapping ( "fixed" )
public void handle( Principal principal ) {
System.out.println( "principal.getName();" + principal.getName() );
String queueName = Helper.getClientToQueueMap().get( principal.getName() );
// in loop just for testing
while(true){
Object o = rabbitTemplate.receiveAndConvert(queueName);
if ( o != null ) {
System.out.println( "Returning mesg**" + o.toString() );
simpMessagingTemplate.convertAndSend( "/app/fixed", o.toString() );
}
try {
Thread.sleep(3000);
} catch ( InterruptedException e ) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
我的web配置有以下内容:-
@Override
protected void configureStompEndpoints( StompEndpointRegistry registry ) {
registry.addEndpoint( "/websocket" ).setAllowedOrigins( "*" );
}
@Override
public void configureMessageBroker( MessageBrokerRegistry config ) {
config.enableStompBrokerRelay( "/topic/", "/queue/", "/exchange/" )
config.setApplicationDestinationPrefixes("/app");
config.enableSimpleBroker("/app");
}
现在我想修改这段代码,以便将消息从队列发送给它各自的特定用户。即使每个用户都将订阅相同的endpoint/app/fixed,他们之间也不应该共享任何消息。通过几篇文章,我发现客户端可以订阅/user/queue/fixed,并且在控制器中使用convertAndSendToUser发送给特定的用户
simpMessagingTemplate.convertAndSendToUser( principal.getName(), "/queue/fixed", o.toString() );
但这不管用。因为我订阅的是/user/queue/fixed,所以这个带有@subscribeMapping(“fixed”)的控制器句柄方法永远不会被调用。有人能帮我做错了什么吗?
这对我来说很有效
@subscribeMapping(“/user/queue/fixed”)在控制器上
并且做
simpMessagingTemplate.convertAndSendToUser( principal.getName(), "/queue/fixed", o.toString() );
客户端订阅/用户/队列/固定
我设置了一个EJB项目,使用JMS将持久性实体对象发送到MDB。我使用JBoss EAP 7,使用Apache ActiveMQ作为消息传递提供程序。我像这样设置ConnectionFactory和队列: 这是我的消息生成器,它接收“Account”实体对象作为参数并将其发送到队列: EntityEnqueueBean。Java语言 MDB从队列接收消息并对其进行处理: java账户 不确定我做错
问题内容: 我试图将字符串消息发送到在weblogic服务器中创建的JMS队列中。我使用Eclipse IDE,当我运行Web应用程序时,出现以下错误,tomcat服务器关闭。错误是 请帮助我。谢谢和最诚挚的问候 问题答案: 基于对该问题的一些快速研究,它似乎是由于在应用服务器和客户端之间使用不同的JDK级别引起的。我看到的大多数示例都表明,在Java 5上运行Weblogic时在客户端上使用Ja
我是Spring JMS的新手。我的应用程序是使用Spring Boot开发的,并部署在JBoss EAP7.2.0中。我有一个远程队列,它是一个活动的MQ Artemis队列,也嵌入在JBoss EAP7.2.0中。有人能建议我如何使用Spring Boot的JmsTemplate向远程JMS队列发送消息吗?基本上,我不知道应该如何定义远程connectionFactory来连接到远程队列。
我使用Spring的STOMP over WebSocket实现与一个全功能的ActiveMQ代理。当用户向主题订阅时,在成功订阅之前必须通过一些权限逻辑。我使用ChannelInterceptor应用权限逻辑,如下所示: WebSocketConfig。爪哇: WebSocketSecurityConfig.java: MySubscriptionInterceptor。爪哇: 当没有足够权限的
我正在开发一个使用Spring Boot版本2.0.4的Java应用程序。RELEASE和RabbitMQ版本3.7.7。该应用程序正在Redis数据库中缓存RabbitMQ中的所有消息,并且在RabbitMQ中创建新队列时必须重新发送。目前,我设法使用Event Exchange Plugin和队列名称捕获了队列创建。我正在使用AMQP出站适配器将消息发送回RabbitMQ。 流出 我可以使用r
我试图使用https://github.com/roribio/alpine-sqs容器 我能够运行docker容器,并使用终端将消息发送到队列。 我用来将消息发送到SQS队列容器的命令如下 我能够接收到消息,并且可以在浏览器中的dashboad中看到它,网址为。 但是当我试图在中使用发送消息时,它抛出了一个错误。 回溯(最后一次调用):文件“/home/infomagnus/PycharmPro