我正在设计一个服务,用于发送电子邮件给我们的电子商务网站(订单确认,警报等......)计划是使用"SendEmail"方法,生成一大块代表要发送的电子邮件的XML,并坚持使用它在Amazon SQS队列中.我的网络应用程序和其他应用程序将使用它来"发送"电子邮件.
然后我需要一种检查队列的方法,并实际发送电子邮件消息.(我知道我将如何发送电子邮件)
我很好奇是什么"轮询"队列的最佳方式是什么?
我应该创建一个Windows服务,并使用Quartz.net之类的东西来安排它每隔x分钟检查一次队列吗?有没有更好的方法呢?
假设我有100个线程从相同的sqs读取 - 是否保证每条消息最多只能传送一次?是否可以不止一次地传递相同的消息?我找不到关于这个问题的任何明确的文件.小号
我正在使用AWS SQS服务,而且我很难在SQS队列上定义权限.在我的设置中,我正在使用AWS Lambda服务,该服务在将对象推送到S3存储桶时触发.
但是为了简单地回答我的问题,这就是我想要实现的目标:
正如您可以从以前的用例中读到的那样,我希望我的AWS Lambda方法成为唯一可以将消息发送到SQS队列的应用程序.我试图设置一个主体和一个条件"sourceArn".但它们都不起作用..
有人可以帮忙吗?
我有以下基础设施:
我有一个带有NodeJS + Express进程的EC2实例在端口上侦听消息(进程1).每次进程收到消息时,都会将其发送到SQS队列.然后我在同一台机器上有另一个进程使用长轮询读取队列(进程2).当它在队列中找到消息时,它会将数据插入位于RDS实例上的MariaDB数据库中.
(只是为了澄清,消息是由用户生成的,他们发送一大块数据,其中包含任意信息到进程1正在侦听的端点)
现在我想将读取SQS(进程2)的进程放在Lambda函数中,以便写入队列的进程和从队列中读取的进程完全独立.问题是我不知道这是否可行.
我知道Lambda函数是为响应事件而调用的,目前支持的事件是S3,SNS,SES,DynamoDB,Kinesis,Cognito,CloudWatch和Cloudformation,但不是SQS.
我正在考虑使用SNS通知来调用Lambda函数,以便每次将消息推送到队列时,都会触发SNS通知并调用Lambda函数,但在使用它后,我意识到这是不可能的从SQS创建SNS通知,只能将SNS通知写入队列.
现在我有点卡住,因为我不知道如何继续.由于AWS服务的当前限制,我觉得无法创建此基础结构.还有另一种方法可以做我想做的事情,还是我处于死胡同?
只是为了通过我所做的一些研究扩展我的问题,这个github repo展示了如何从Lambda函数读取SQS队列,但 lambda函数只有在从命令行触发时才有效:
https://github.com/robinjmurphy/sqs-to-lambda
在自述文件中,作者提到了以下内容:
更新:Lambda现在支持SNS通知作为事件源,这使得这个hack完全不需要SNS通知.如果您喜欢使用Lambda函数处理SQS队列上的作业,您可能仍会发现它很有用.
但我认为这不能解决我的问题,SNS通知可以调用Lambda函数,但是当我在SQS队列中收到消息时,我看不到如何创建通知.
谢谢
我使用Spark 2.2.0.
如何使用pyspark将Amazon SQS流提供给spark结构化流?
这个问题试图通过创建自定义接收器来解决非结构化流和scala的问题.
pyspark中有类似的东西吗?
spark.readStream \
.format("s3-sqs") \
.option("fileFormat", "json") \
.option("queueUrl", ...) \
.schema(...) \
.load()
Run Code Online (Sandbox Code Playgroud)
根据Databricks上面的接收器可以用于S3-SQS文件源.但是,对于只有SQS,如何才能采用一种方法.
我尝试从AWS-SQS-Receive_Message理解接收消息.但是,如何直接将流发送到火花流还不清楚.
amazon-sqs apache-spark pyspark-sql spark-structured-streaming
我正在尝试通过AWS Lambda函数启动并运行一个玩具示例f,该函数由一个SQS队列上的消息触发,然后sqs发布到另一个队列sqs',然后由一个工作程序f'读取sqs'并处理该消息,其中整个“ X射线追踪“请求”。
sqs -> f -> sqs' -> f'
目前,我已经准备好队列,并从队列中写入和接收函数。我也有X射线跟踪从第一个函数f到sqs队列的请求。
我当前的挑战是:如何将跟踪信息传播给最终工作人员,以便可以在X射线中看到整个过程。
这是我当前的功能:
public class Hello implements RequestHandler<SQSEvent, Void> {
String OUTPUT_QUEUE_URL = "...";
private AmazonSQS sqs = AmazonSQSClientBuilder.standard()
.withRequestHandlers(new TracingHandler(AWSXRay.getGlobalRecorder()))
.build();
public Void handleRequest(SQSEvent event, Context context)
{
for(SQSMessage msg : event.getRecords()){
System.out.println(new String(msg.getBody()));
}
SendMessageRequest send_msg_request = new SendMessageRequest()
.withQueueUrl(OUTPUT_QUEUE_URL)
.withMessageBody("hello world")
.withDelaySeconds(5);
sqs.sendMessage(send_msg_request);
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
public class World implements RequestHandler<SQSEvent, Void>{
public …Run Code Online (Sandbox Code Playgroud) 所以我一直在努力掌握亚马逊,__CODE__因为我公司的整个基础设施都是以它为基础的.
我从未能够正确理解的一个组件是__CODE__,我已经搜索了很多但是我无法得到满意的答案.我认为一份__CODE__工作并且__CODE__有些相似,如果我错了,请纠正我.
到底究竟__CODE__是什么?据我所知,它存储了其他组件__CODE__用于执行任务的简单消息,您可以发送消息来执行此操作.
在这个问题中,有人可以向我解释一下普通网络服务中使用的Amazon Web Services组件是什么吗?; 答案提到他们用来__CODE__排队他们想要异步执行的任务.为什么不直接向用户发送消息并稍后进行处理?为什么要等着__CODE__做呢?
另外,我只想说我有一个网络应用程序,允许用户安排一些日常任务,如何__CODE__适应?
根据文档,AWS SQS消息保留期的最大值为14天.在那之后,消息将从队列中删除.
SQS是否有任何方式在保留期到期后不丢失这些消息?例如,目前尚不清楚或是否可以为此目的使用死信队列?
我可以发誓,有一种简单的方法可以更改配置为 Lambda 触发器的 SQS 队列的批量大小,但截至 2020 年 7 月,我再也找不到发生这种情况的地方。这可能与目前在 AWS 顶部宣传的“新 SQS 控制台体验”有关。
我可以看到队列的当前批次大小(屏幕截图),但该数字不可编辑。我也没有在 SQS 界面中看到与批量大小相关的任何内容。我当前的 IAM 凭证可能无法更改批量大小,并且对我隐藏。有谁知道可以在哪里更改此值?
amazon-sqs ×10
aws-lambda ×4
amazon-ec2 ×1
amazon-s3 ×1
apache-spark ×1
c# ×1
callback ×1
java ×1
pyspark-sql ×1
python ×1
queue ×1