Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 如何使用“连接到多个VPN”;solace jms弹簧靴“;美国石油学会_Spring Boot_Jms_Solace - Fatal编程技术网

Spring boot 如何使用“连接到多个VPN”;solace jms弹簧靴“;美国石油学会

Spring boot 如何使用“连接到多个VPN”;solace jms弹簧靴“;美国石油学会,spring-boot,jms,solace,Spring Boot,Jms,Solace,使用此处提供的说明,我成功地实现了Spring boot应用程序,以连接到单个VPN,并使用/生成来自/到该VPN上队列的消息(非常有用): 但现在我正努力解决以下问题: 根据read me,使用此属性,我们只能指定一个VPN:solace.jms.msgVpn 如何连接到2个不同的VPN,并在每个VPN中消费/生产从/到队列?我们可以在同一个spring boot应用程序中执行此操作吗 任何帮助都将不胜感激 另一个问题-我们如何使用这些API回复消息?尽管您当前无法使用solace jms

使用此处提供的说明,我成功地实现了Spring boot应用程序,以连接到单个VPN,并使用/生成来自/到该VPN上队列的消息(非常有用):

但现在我正努力解决以下问题: 根据read me,使用此属性,我们只能指定一个VPN:solace.jms.msgVpn

如何连接到2个不同的VPN,并在每个VPN中消费/生产从/到队列?我们可以在同一个spring boot应用程序中执行此操作吗

任何帮助都将不胜感激


另一个问题-我们如何使用这些API回复消息?

尽管您当前无法使用
solace jms spring boot
一次连接到多个VPN,但您有两个选项:

  • 发布回不同主题上的同一VPN,并使用VPN网桥将其桥接到另一个VPN。这种方法的优点是,如果需要,您可以桥接到许多其他VPN,这些VPN可以位于同一个或另一个代理上。由于这是以管理方式完成的,因此除了发布到新主题之外,不需要对应用程序进行任何更改。请注意,您需要配置网桥和订阅,这需要管理访问权限。如果使用新的动态消息路由功能,可以减少或消除与配置主题相关的管理负担。DMR跨多个站点工作,并在添加或删除订阅时动态处理消息路由

  • 在Spring Boot应用程序中使用Solace Spring Cloud Stream(SCS)活页夹(可在GitHub和Maven Central上获得)。绑定器支持同一应用程序中使用相同或不同传输的多个绑定器-在这种情况下,您可以为同一个代理定义两个Solace绑定器,但具有不同的VPN名称

  • 关于确认消息,使用
    solace jms spring boot
    您不需要显式地确认消息,因为spring jms使用本地事务。如果回调抛出异常,事务将回滚,否则将提交。如果回滚,默认情况下,消息将返回队列并重新传递。这可能会导致你的应用程序进入一个无限循环,试图处理一条坏消息,因此建议在队列上设置属性
    max redelivery
    >0,并指定一个死消息队列,毒药消息将在该队列中超过redelivery限制。默认情况下,DMQ是
    #DEAD\u MSG\u QUEUE
    ,您可能需要创建它。请注意,发布消息时还必须将DMQ合格标志设置为true

    如果您决定改用SCS绑定器,则确认机制不同,不使用本地事务,而是由SCS管理。有关重试、DMQ(也称为DLQ)以及全局和应用程序级错误处理程序的详细信息,请参阅SCS参考文档。由于SCS提供了类似的功能,您不需要在代理上配置max redelivery或DMQ,消息也不需要设置DMQ合格标志。相反,您需要在应用程序属性/YAML中配置错误处理。通常,当您的应用程序引发异常时,将尝试重新交付,并且在超过交付限制(默认情况下为3次)后,将转到DLQ或在应用程序或全局级别定义的错误处理程序。如前所述,这将取决于您的配置

    禁用本地事务的一个示例是。然后可以使用
    setSessionAcknowledgeMode(Session.CLIENT\u ACKNOWLEDGE)
    启用客户端确认。但是,任何异常都可能不会回滚其他操作(例如,如果您在另一个会话上发布回复)。请注意,
    @JmsListener
    注释应指定引用容器工厂的
    containerFactory
    参数


    根据
    DefaultMessageListenerContainer
    的文档,如果要避免消息丢失或非原子操作,最好使用事务。当您的回调成功返回时,事务和客户端确认都将完成。

    感谢您的回复。我在getDefJmsListenerFactory()方法中使用该解决方法初始化SolConnectionFactory,并手动设置VPN和其他连接属性;setVPN(env.getProperty(“vpn.name”);工厂。设置连接工厂(scf);关于消息确认,您提到Spring使用本地事务。因此,如果我设置factory.SetSessionTransact(false);它还会向路由器确认消息吗?请查看添加的新详细信息,以解决您的问题:无交易。