【问题标题】:AWS lambda amqp qpid Failed to connect to remote atAWS lambda amqp qpid 无法连接到远程
【发布时间】:2022-06-30 01:43:28
【问题描述】:

我正在使用 AMQP 1.0 协议将消息发布到使用 qpid 1.6.0 JMS 库的活动 mq 服务器。我已经在 AWS lambda 中实现了这一点。当我部署微服务并触发请求时,它将成功将消息发布到 AMQP 服务器。并且连续触发将起作用。但是当我在 10 分钟后尝试时,出现以下错误。

这可能是由于冷启动。但是为什么后面不能建立连接

2022-06-22 09:08:46.118 ERROR 9 --- [           main] org.apache.qpid.jms.JmsConnection        
: Failed to connect to remote at: amqp://mycomanyhost:5672
2022-06-22 09:08:46.120 ERROR 9 --- [           main] 
ingCloudCbmaWebMethodFunctionApplication : connection timed out: /10.62.234.104:5672
javax.jms.JMSException: connection timed out: /mycompanyhost:5672
at 
org.apache.qpid.jms.provider.ProviderException.toJMSException(ProviderException.java:34) 
~[qpid-jms-client-1.6.0.jar:na]
at 
org.apache.qpid.jms.exceptions.JmsExceptionSupport.create(JmsExceptionSupport.java:80) ~ 
[qpid-jms-client-1.6.0.jar:na]
at 
org.apache.qpid.jms.exceptions.JmsExceptionSupport.create(JmsExceptionSupport.java:112) 
~[qpid-jms-client-1.6.0.jar:na]
at org.apache.qpid.jms.JmsConnection.connect(JmsConnection.java:176) ~[qpid-jms-client- 
1.6.0.jar:na]
at 
org.apache.qpid.jms.JmsConnectionFactory.createConnection(JmsConnectionFactory.java:213) 
~[qpid-jms-client-1.6.0.jar:na]

这是我的 lambda 中的代码

    {
     //start of static block
    try {
        logger.info("Application Init: started");
        jmscontext = new InitialContext();
        logger.info("Application Init: connection factory initalized");
        logger.info("Amqp url is: {}", System.getenv().get("amqpurl"));
        logger.info("amqp username is : {}", System.getenv().get("amqpusername"));
        factory = (ConnectionFactory) jmscontext.lookup(System.getenv().get("amqpurl"));

        logger.info("Application Init: establishing connection");
        connection = factory.createConnection(System.getenv().get("amqpusername"),
                System.getenv().get("amqppassword"));
        connection.start();
        logger.info("Application Init: connection established");
    } catch (Exception e) {
        logger.error(e.getMessage(), e);
        erromsg = e.getMessage();
    } // end of static block
}

@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) {
    LambdaLogger logger1 = context.getLogger();
    PrintWriter writer = new PrintWriter(
            new BufferedWriter(new OutputStreamWriter(outputStream, Charset.forName("US-ASCII"))));
    Session session = null;
    try {
        Destination queue = (Destination) jmscontext.lookup("myTopicLookup");

        logger.info("Queue Setup done");
        logger.info("From trigger Request: Queue initalized");
        // logger.info("From trigger Request: Connection establised");
        connection.setExceptionListener(new MyExceptionListener());
        JsonNode jmsRequest = mapper.readTree(inputStream);
        logger.info("From trigger Request: received paylod {}", jmsRequest.toString());
        JsonNode body = jmsRequest.get("data");

        if (connection == null) {
            writer.append(erromsg);
        } else {
            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            logger.info("From trigger Request: session created");
            MessageProducer messageProducer = session.createProducer(queue);
            logger.info("From trigger Request: message producter created with queue");
            TextMessage message = session.createTextMessage(body.toString());
            
            messageProducer.send(message, DELIVERY_MODE, Message.DEFAULT_PRIORITY, Message.DEFAULT_TIME_TO_LIVE);
            logger.info(" Message sent successfully");
            logger.info("Messgae sent is : {}", message.getText());

            writer.append("Message sent sucessfully for request id: "
                    + body.get("notification").get("transactionID").asText());

        }

    } catch (Exception e) {

        logger1.log(e.getMessage());
        logger.error(e.getMessage(), e);
        if (writer != null)

            writer.append(e.getMessage());

    } finally {
        if (session != null)
            try {
                session.close();
            } catch (JMSException e) {
                logger.error(e.getMessage(), e);
                writer.append(e.getMessage());
            }
        writer.close();
    }
}

【问题讨论】:

    标签: aws-lambda jms amqp activemq-artemis


    【解决方案1】:

    如果您快速连续执行两次调用,它会起作用吗?

    如果是这样,并且在 10 分钟后无法正常工作,我想您的连接正在超时。您需要配置或处理错误情况并重新连接。

    【讨论】:

      猜你喜欢
      • 2013-03-18
      • 2021-06-10
      • 2019-11-08
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 2017-12-13
      • 2018-05-13
      相关资源
      最近更新 更多