【问题标题】:Integrate RabbitMQ with Spring Please advise on how to implement failure scenarios将 RabbitMQ 与 Spring 集成 请告知如何实现故障场景
【发布时间】:2016-05-19 19:15:35
【问题描述】:

1) 下面是rabbitMQ的Spring配置代码。

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="http://www.springframework.org/schema/rabbit"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/rabbit
                        http://www.springframework.org/schema/rabbit/spring-rabbit-1.5.xsd
                        http://www.springframework.org/schema/context 
                        http://www.springframework.org/schema/context/spring-context-4.1.xsd           
                        http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-4.1.xsd">

    <context:component-scan base-package="com.messaging.impl" />

    <rabbit:connection-factory id="connectionFactory"
            host="${rabbitmq.host}" port="${rabbitmq.port}"
            username="${rabbitmq.username}" password="${rabbitmq.password}"
            channel-cache-size="${rabbitmq.ChannelCacheSize}"
            requested-heartbeat="${rabbitmq.requestedHeartBeat}" />

    <rabbit:template id="amqpTemplate" connection-factory="connectionFactory"
        exchange="${request.exchange}" queue="${request.out.queue}" />

    <rabbit:admin id="rabbitAdmin" connection-factory="connectionFactory" />

    <rabbit:queue name="${request.out.queue}"
            declared-by="rabbitAdmin" />

    <rabbit:listener-container
        connection-factory="connectionFactory">
        <rabbit:listener queues="${request.out.queue}"
                ref="messageSender" />
    </rabbit:listener-container>

    <bean id="messageSender"
          class="com.messaging.impl.MessageSenderImpl" />

    <rabbit:topic-exchange name="${request.exchange}"
            declared-by="rabbitAdmin">
        <rabbit:bindings>
            <rabbit:binding queue="${request.out.queue}"
                    pattern="routingkey.*" />
        </rabbit:bindings>
    </rabbit:topic-exchange>


</beans>

2) 下面是 Java sender 类的代码。

    @Service
    public class MessageSenderImpl implements MessageSender  {
        @Autowired
        private AmqpTemplate amqpTemplate;

        public void sendMessage(String message){

            amqpTemplate.convertAndSend(message);
            System.out.println("message is" +message);
        }
    }

3) pom.xml 有以下依赖

    <dependency>
        <groupId>org.springframework.amqp</groupId>
        <artifactId>spring-amqp</artifactId>
        <version>1.5.3.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.amqp</groupId>
        <artifactId>spring-rabbit</artifactId>
        <version>1.5.3.RELEASE</version>
    </dependency>

我没有找到可用于此要求的完整示例。我在检查了各种网站并选择了此设置所需的网站后提出了此配置。请指教。

注意:- 我已经实现了发布到交易所并从队列中读取。但是,我需要有关如何实施失败场景的建议。请指教。

【问题讨论】:

    标签: java spring rabbitmq spring-integration spring-amqp


    【解决方案1】:

    能否请您发布整个堆栈跟踪?如果你使用老式的会发生什么

    <bean id="amqpTemplate" class="org.springframework.amqp.core.AmqpTemplate" >
    </bean
    

    【讨论】:

      【解决方案2】:

      这是最简单的成功场景,我建议您按照此处看到的方式进行操作。首先确保您连接到正确的服务器,然后在您的流程中添加更多内容。我猜你错过了 vhost 看看下面。 (另外你忘了提到你面临的问题)

      <int-amqp:inbound-channel-adapter channel="fromRabbit" queue-names="${rabbitmq.sourcequeue}" connection-factory="connectionFactory" concurrent-consumers="5" />
      <int:channel id="fromRabbit">
              <int:interceptors>
                  <int:wire-tap channel="consoleOut" />
              </int:interceptors>
      </int:channel>
      <int-stream:stdout-channel-adapter id="consoleOut"  append-newline="true" />
      <!-- Infrastructure -->
      <rabbit:connection-factory id="connectionFactory" host="${rabbitmq.host}"  port="${rabbitmq.port}" username="${rabbitmq.username}" password="${rabbitmq.password}" virtual-host="${rabbitmq.vhost}" />
      <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" />
      <rabbit:admin connection-factory="connectionFactory" />
      <rabbit:queue name="${rabbitmq.sourcequeue}" />
      <rabbit:direct-exchange name="${rabbitmq.exchangeaname}">
        <rabbit:bindings>
         <rabbit:binding queue="${rabbitmq.sourcequeue}" key="${rabbitmq.keyname}" />
        </rabbit:bindings>
      </rabbit:direct-exchange>
      

      【讨论】:

        猜你喜欢
        • 2014-08-15
        • 2018-01-04
        • 2020-08-17
        • 1970-01-01
        • 2020-12-29
        • 1970-01-01
        • 2014-07-30
        • 1970-01-01
        • 2021-03-25
        相关资源
        最近更新 更多