- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
v2.0.0-preview.3
go version
)?go1.9.3 darwin/amd64
我正在为 Go 中的 Step Functions 编写一个 Activity Worker。
时间:
一切似乎都运行良好。
但是,当:
工作人员似乎在轮询 SFN,但它不执行在其停止期间启动的任务。如果我们在此时开始新的工作流执行(当 worker 正在运行时),则 worker 会成功执行新任务。工作人员停止期间执行的工作流未被工作人员拾取。
编辑:查看执行历史,我看到超时状态和以下事件日志:
这里是我的 SFN 状态机:
{
"Comment": "An example using a Task state.",
"StartAt": "getGreeting",
"Version": "1.0",
"TimeoutSeconds": 300,
"States":
{
"getGreeting": {
"Type": "Task",
"Resource": "arn:aws:states:ap-southeast-1:196709014601:activity:get-greeting",
"End": true
}
}
}
这是我的 SFN 工作人员:
package main
import (
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/aws/endpoints"
"github.com/aws/aws-sdk-go-v2/aws/external"
"github.com/aws/aws-sdk-go-v2/service/sfn"
"fmt"
"encoding/json"
)
type Worker struct {
svc *sfn.SFN
activityARN string
}
type Task struct {
input *string
token *string
}
func New(activityARN string) *Worker {
cfg, err := external.LoadDefaultAWSConfig()
if err != nil {
panic("unable to load SDK config, " + err.Error())
}
// Set the AWS Region that the service clients should use
cfg.Region = endpoints.ApSoutheast1RegionID
// Using the Config value, create the Step Functions client
svc := sfn.New(cfg)
w := &Worker{
svc: svc,
activityARN: activityARN,
}
return w
}
func (w *Worker) getTask() *Task {
req := w.svc.GetActivityTaskRequest(&sfn.GetActivityTaskInput{
ActivityArn: aws.String(w.activityARN),
})
res, err := req.Send()
if err != nil { fmt.Println("failed to get tasks, "+err.Error()) }
return &Task{
input: res.Input,
token: res.TaskToken,
}
}
// Call SendTaskSuccess on success
func (w *Worker) handleSuccess(taskToken *string, json *string) error {
req := w.svc.SendTaskSuccessRequest(&sfn.SendTaskSuccessInput{
TaskToken: taskToken,
Output: json, // JSON string
})
_, err := req.Send()
if err != nil { fmt.Println("failed to send task success result, "+err.Error()) }
return err
}
// Call SendTaskFailure on error
func (w *Worker) handleFailure(taskToken *string, err error) error {
errorMessage := err.Error()
req := w.svc.SendTaskFailureRequest(&sfn.SendTaskFailureInput{
TaskToken: taskToken,
Error: &errorMessage,
})
_, err = req.Send()
if err != nil { fmt.Println("failed to send task failure result, "+err.Error()) }
return err
}
func main() {
activityARN := "arn:aws:states:ap-southeast-1:196709014601:activity:get-greeting"
worker := New(activityARN)
fmt.Println("Starting worker")
for {
// 1. Poll GetActivityTask API for tasks
fmt.Println("Polling for tasks")
task := worker.getTask()
if task.token == nil { continue }
// 2. Do some actual work
fmt.Println("Working")
result, err := work(task.input)
// 3. Notify SFN on success and failure
fmt.Println("Sending results")
if err == nil {
worker.handleSuccess(task.token, result)
} else {
worker.handleFailure(task.token, err)
}
}
}
// Handles marshalling and un-marshalling JSON
func work(jsonInput *string) (*string, error) {
input := &GreetInput{}
json.Unmarshal([]byte(*jsonInput), input)
result, err := Greet(input) // Actual work
if err != nil { return nil, err }
outputBytes, _ := json.Marshal(result)
output := string(outputBytes)
return &output, nil
}
// Actual handler code
type GreetInput struct {
Who string
}
type GreetOutput struct {
Message string
}
func Greet(input *GreetInput) (*GreetOutput, error) {
message := fmt.Sprintf("hello %s", input.Who)
output := &GreetOutput {
Message: message,
}
fmt.Println(message)
return output, nil
}
运行:
go build worker.go && ./worker
最佳答案
根据您的更新,我认为工作人员没有正常停止(即,当杀死工作人员时,您没有等到 GetActivityTask
请求结束),因此 Step Functions 可能会响应(已经死亡的)工作人员。
所以工作流程如下:
GetActivityTask
请求并停止(直到达到超时)。GetActivityTask
结束就被杀死。GetActivityTask
仍然挂起 - 将新执行的任务发送给它。要检查是否是这种情况,只需在杀死工作人员后稍等片刻(我不知道 AWS SDK for Go 中 GetActivityTask
的默认等待时间是多少 - 5 分钟应该可以完成工作)然后创建执行。如果新执行按预期工作,那么您应该向工作人员添加优雅退出(等到 GetActivityTask
结束并最终处理任务)。
关于amazon-web-services - AWS Step Functions Activity Worker 在工作人员停止时看不到执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49292908/
我正在使用 choronos,它建议使用 start/stop 命令开始停止,如下所示 开始计时 停止计时 但是,我正在编写 puppet manifest,它只适用于下面的服务命令。 服务计时开始
来历及作用 services.exe进程程序文件是由微软公司为其发布的Windows操作系统定义的一个系统进程,常见于Windows 2000/XP/Vista/2007等系统中,被描述为服务和控
我一直在尝试使用installutil:installutil /u GSIS.FileMoverService.exe安装Windows服务。 我得到的输出是: Uninstalling assem
如果一个域有多个团队和多个 Web 应用程序,那么注册 Service Worker 来管理整个站点的最佳建议是什么?具有范围的顶级服务 worker /或子域中的多个服务 worker ?由于一个域
我已经在 eclipse 中创建了企业项目。动态web项目和ejb项目对企业项目有借鉴意义。当我运行管理员(企业项目)运行时选择 wildfly 服务器 18。我收到以下错误。谁能告诉我我错过了什么。
我已经使用 apache-cxf-2.7.4 创建了一个 Web 服务。我进入了我的项目中制作的类(class)。我的项目中的库是: math3-commons-3.2.jar XStream-1.4
我在域中的 Virtual Box 中运行集群计算机,默认情况下服务在 Network 服务下运行,服务一直停止,事件日志中出现以下错误。 请从下面的错误日志中查找错误详细信息。任何帮助都会很棒。 L
在我的应用程序中,用户可以在 map 上发布事件。应用程序的入口点是一个无状态的 web api 服务。为了在内部代表用户,我想要一个用户服务。我应该何时使用 Reliable Stateful Ac
当我尝试运行在WIX中创建的安装程序时,出现以下错误消息: “服务'Report Generator Service'(报告生成器服务)无法启动。请验证您是否具有启动系统服务的足够特权”。 我已经在这
尝试使用 cloudformation 创建 ECS 服务(在 Fargate 上)但出现错误: Invalid service in ARN (Service: AmazonECS; Status
我正在编写一个简单的Windows服务,该服务每个月向所有员工发送一封电子邮件。我的问题是,完成后如何停止自我?我是该领域的新手,请帮帮我。非常感谢。 它将部署在服务器上以每月运行。我没有开始做这件事
有谁知道是否有办法在 service worker 中获取此号码或日期: 将我的服务 worker 缓存命名为 cache-1182 会很方便或 cache-20171127171448 我想在安装事
我想开始使用 Azure Service Fabric 技术。 我按照this document工作并安装最新的SDK。安装后,我打开 PowerShell(“以管理员身份运行”)命令行窗口并写入这些
我在使用 whenever gem 时遇到了一些问题。我创建了一个 rake 任务,当我自己启动它时它工作得很好但是当我在日志中收到以下消息时尝试自动执行它: ActiveRecord::Statem
我想在 service fabric 集群中为两个不同的 web 应用程序(webpi/website)共享 http/80 端口,应用程序必须有 2 个不同的主机名: mywebapi.com 和
我创建了一个使用 MongoDB 实现 hibernate OGM 的应用程序。它在 Eclipse 中运行得很好,但是,当我构建一个 fat jar 并尝试运行它时,出现以下错误: Exceptio
我有一个 Selenium Python 测试套件。它开始运行,但几分钟后抛出以下错误: Exception AttributeError: "'Service' object has no attr
我按照此链接的说明进行操作:https://www.thegeekdiary.com/centos-rhel-7-how-to-make-custom-script-to-run-automatica
我在 ubuntu 下的 jboss 上部署了简单的“HelloWorld”Web 服务。 我创建了简单的客户端,但我无法让它工作。每次运行客户端时,我都会收到 NullPointerExceptio
我正在尝试为我的网站使用后台定期同步。我正在使用 localhost 并在 1*1000 毫秒时注册 periodicsync 事件,但这根本不会触发。 我看过这个demo ,但即使我将该网站安装为应
我是一名优秀的程序员,十分优秀!