订阅AWS SNS Java程序

时间:2016-04-25 22:48:34

标签: amazon-web-services aws-lambda amazon-sns

  • 我使用Python程序使用Raspberry Pi的SNS通知发布String消息作为消息有效负载,我想将该消息有效负载传递给Lambda函数。
  • 我已在AWS上的SNS控制台中配置了该要求,即我已创建了一个主题并将lambda函数添加到其订阅者。
  • 现在,我想在lambda函数中获取该消息有效负载。但我找不到任何可以帮助我做到这一点的方法。例如,像getMessage或类似的东西。
  • 所以我的问题是:由于我在AWS上配置了发布和订阅,我可以假设客户端已连接,如果我发布消息,我应该在订阅者端获取该消息,这是我的lambda函数吗? 另外,我可以在lambda函数中获取消息有效负载的技术是什么? 我按照cjwfuller的建议添加以下内容。
  • 下面我写下了用Python发布的方法

client_boto = boto3.client('sns', aws_access_key_id='@@@', aws_secret_access_key='@@@', region_name='us-west-2')

REGION = 'us-west-2'

TOPIC = 'arn:aws:sns:us-west-2:***:topic_name'

MSG = ntpath.basename(f_string)

SUBJECT_boto = 'File Name'

pub =client_boto.publish(TopicArn = TOPIC, Message = MSG, Subject=SUBJECT_boto)

我正在用Java编写订阅代码。    由于我的lambda func已经在AWS控制台上订阅了它,    如果我的Java程序再次包含订阅或者是否存在    直接获取msg有效负载的方法。

2 个答案:

答案 0 :(得分:0)

你在写这个函数的语言是什么?以JavaScript为例:

exports.myHandler = function(event, context, callback) {
    console.log("value1 = " + event.key1);
    console.log("value2 = " + event.key2);
    // ...
}

来源:http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html

在编写所有代码之前,有用的测试AWS Lambda控制台中的东西。

  

由于我在AWS上配置了发布和订阅,我可以假设客户端已连接

客户并非真正“连接”,他们只是订阅了某个主题。

  

发布一条消息,我应该在订阅者端获取该消息,这是我的lambda函数吗?

听起来你正在做正确的事情 - 发布示例代码将有助于我们提出更准确的答案。

答案 1 :(得分:0)

在搜索时,我找到了SNSEvent的类,https://github.com/aws/aws-lambda-java-libs/blob/master/aws-lambda-java-events/src/main/java/com/amazonaws/services/lambda/runtime/events/SNSEvent.java

此类包含与获取消息有效负载相关且需要的所有方法。

Java中的Lambda函数处理程序就是这样的, 例;

public void handleRequest(SNSEvent input, Context context){
  String this_takes_message=input.getRecords().get(0).getSNS().getMessage();
}