当前位置: 首页 > 知识库问答 >
问题:

管理JMS消息到多个服务器的传递

双浩涆
2023-03-14

https://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/jms.html

像ConnectionFactorys一样,目的地是JMS管理的对象,可以在JNDI中存储和检索。在配置Spring应用程序上下文时,可以使用JNDI工厂类JndiObjectFactoryBean/对对象对JMS目的地的引用执行依赖注入。

这是我以前从未做过的事。无论如何,是否要配置目标,它将选择正确的服务器来路由消息?意思是,如果message1应该被传递到server1,那么它甚至不会被传递到server2,并一直留在队列中,直到server1使用它?

共有1个答案

何兴学
2023-03-14

我认为使用JMS目的地的想法是不可行的,因为JMS规范中没有任何东西保证目的地和代理之间的任何链接。目标只是特定于提供程序的队列/主题名称的封装。

这里的底线是,您要么首先需要防止重复消息,要么在重复消息被从队列中拉出后,采取某种方法协调消费者处理它们。我认为您可以使用外部系统(如数据库)来实现这两种操作,例如:

  • 生成消息时,请检查数据库中是否有消息已发送的指示。如果没有找到任何指示,则向数据库写入一条记录(需要使用主键以防止重复)并发送消息。否则不要发送消息。
  • 在使用消息时,检查数据库中是否有消息已经被(或曾经)使用的指示。如果没有找到任何指示,则向数据库写入一条记录(需要使用主键以防止重复)并处理消息。否则,只需确认消息而不处理它。
 类似资料:
  • 我使用分布式jms队列,weblogic是我的应用服务器。在我的集群环境中部署了三个jms服务器。例如,生产者只是使用队列名称jndi lookup 'udq '来发送消息。现在,我已经为每个jms服务器关联了一个消费者,并且能够消费消息,到目前为止没有问题。 这里有一个问题,我是否可以让一个消费者使用来自3个jms服务器的消息。weblogic允许使用以下语法对目标查找进行jndi命名:@ 我只

  • 我正在制作一个不和谐的机器人,我计划在多个服务器上运行。每台服务器都有一个不同的欢迎频道名称以及所有这些。我制作了欢迎消息,并尝试让机器人在一个名为“欢迎”的频道中发布消息,这将解决这个问题,但没有成功。我曾考虑创建一个数据库,将服务器所有者发送给bot的通道id保存在服务器名称/id下。触发bot时,会将服务器id与数据库中的id匹配,然后获取链接到服务器id的通道id。但这需要大量SQL或Po

  • 我有一个使用ActiveMQ的JMS生产者/订阅者的简单Spring应用程序,配置如下: 我试过所有可能的解决办法,但没有一个奏效。我们非常感谢任何帮助

  • 我需要一个用于谷歌云消息传递的示例应用程序。使用示例服务器来测试我的应用程序,任何人都可以帮助我吗? 我需要一个样本服务器来测试我的代码,我已经写了代码,但我不知道它是否会工作。我不知道服务器端编码,所以任何人都可以在这方面帮助我。这是我的代码 意向服务 我的主要活动

  • 我使用以下代码消费来自JMS ActiveMQ的消息: 我的要求是从这里消费并将其发布到Kafka出站适配器。使用以下配置: 以下是我想实现的目标: > 我注意到我的消息会立即出队,如果处理遇到一些异常,我无法重新处理它。我不希望这种情况发生。 我真的很难让它发挥作用。有人能帮帮我吗?

  • 问题内容: 我阅读了今年的UberConf的幻灯片,其中一位发言者认为Spring JMS给您的消息队列系统增加了性能开销,但是在幻灯片中我看不到任何证据支持这一点。演讲者还提出了点对点比传统“发布- 订阅”方法更快的情况,因为每个消息仅发送一次,而不是广播给每个消费者。 我想知道是否有经验的Java消息传递专家可以在这里介绍一些技术问题: 使用Spring JMS而不是单纯的JMS实际上会产生性

  • 此应用程序收到 但是,当不存在web套接字会话,并且JMSProducer将消息发送到QueueSenderSessionBean中的目标“jms/notificationQueue”时,消息会立即在NotificationEndpoint中使用。这不是我的意图。 我的目的是让队列保留消息,直到用户连接到NotificationEndpoint。如果用户没有连接到NotificationEndpo

  • 新服务器密钥是否仅限于消息传递? 说明:在firebase项目设置中,我可以获得“旧”和新服务器密钥(云消息选项卡)。旧版本无法通过发送推送通知https://fcm.googleapis.com/fcm/send 因为响应说它是一个遗留服务器密钥。但在这里,它可以被限制在某些谷歌API中https://console.developers.google.com/apis. 谷歌API控制台中没有