Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何等待进程完成Java AWS Lambda_Java_Amazon Web Services_Aws Lambda - Fatal编程技术网

如何等待进程完成Java AWS Lambda

如何等待进程完成Java AWS Lambda,java,amazon-web-services,aws-lambda,Java,Amazon Web Services,Aws Lambda,我想等到我的过程结束后再返回我的speechlet响应,否则它似乎会切断我的过程,因此,没有完成它,我实际上相信它可能会冻结过程,但这不是我的愿望 我该如何等待 @Override public SpeechletResponse onIntent(SpeechletRequestEnvelope<IntentRequest> requestEnvelope) { IntentRequest request = requestEnvelope.getRequest();

我想等到我的过程结束后再返回我的speechlet响应,否则它似乎会切断我的过程,因此,没有完成它,我实际上相信它可能会冻结过程,但这不是我的愿望

我该如何等待

@Override
public SpeechletResponse onIntent(SpeechletRequestEnvelope<IntentRequest> requestEnvelope) {
    IntentRequest request = requestEnvelope.getRequest();

    Intent intent = request.getIntent();
    String intentName = (intent != null) ? intent.getName() : null;

    if (intentName == null) return null;

    switch (intentName) {
        case IntentTitle.NEW_TICKET:

            switch (request.getDialogState()) {
                case STARTED:
                    return Response.getDialogueResponse(intent, true);
                case IN_PROGRESS:
                    return Response.getDialogueResponse(intent, false);
                case COMPLETED:
                    String numberString = intent.getSlot(SlotTitle.ID).getValue();
                    if (!NumberUtils.isCreatable(numberString)) return Response.ERROR;

                    Member member = Info.GUILD.getMemberById(numberString);
                    User sender = UserDB.getUser(member);

                    CommissionTicket commissionTicket = new CommissionTicket(sender);
                    commissionTicket.create();

                    //wait until processes finish before continuing

                    return Response.NEW_TICKED_CREATED;
            }
    }

    return null;
}
@覆盖
公共SpeechletResponse-OnContent(SpeechletRequestEnvelope-requestEnvelope){
IntentRequest request=requestEnvelope.getRequest();
Intent=request.getIntent();
字符串intentName=(intent!=null)?intent.getName():null;
if(intentName==null)返回null;
交换机(intentName){
案例意向书。新票:
开关(request.getDialogState()){
案件开始:
返回Response.getDialogueResponse(intent,true);
正在进行的案件:
返回Response.getDialogueResponse(intent,false);
个案完成:
String numberString=intent.getSlot(SlotTitle.ID).getValue();
if(!NumberUtils.iscreated(numberString))返回Response.ERROR;
Member Member=Info.GUILD.getMemberById(numberString);
User sender=UserDB.getUser(成员);
佣金票证佣金票证=新佣金票证(发送方);
commissionTicket.create();
//等待进程完成后再继续
return Response.NEW_TICKED_创建;
}
}
返回null;
}
更新: 看了一下CloudWatch的日志,我所期待的事情正在发生。。。看看这些日志的时间(我运行了3次,所以记录了3次不同的时间,但都是在同一个lambda会话之外)

public void create(){
系统输出打印项次(“log2”);
GuildController GuildController=Info.GUILD.getController();
guildController.createTextChannel(ticketType.name().toLowerCase()+“-”+creator.getName()+“-”+id.value()).queue(通道->{
系统输出打印项次(“log3”);
ChannelManager ChannelManager=channel.getManager();
GuildManager GuildManager=channelManager.getGuild().getManager();
List members=guildManager.getGuild().getMembers();
List admin=new ArrayList();
代表(成员:成员){
for(角色:member.getRoles()){
如果(!role.getName().equalsIgnoreCase(Info.ADMIN_STRING))继续;
添加管理员(成员);
}
}
系统输出打印项次(“log4”);
代表(成员:成员){
如果(member.equals(creator.getMember())继续;
channel.createPermissionOverride(member).setDeny(Permission.MESSAGE_READ).queue();
}
系统输出打印项次(“log5”);
对于(成员管理员:管理员){
如果(admin.equals(creator.getMember())继续;
channel.createPermissionOverride(admin).setAllow(Permission.MESSAGE_READ).queue();
}
系统输出打印项次(“log6”);
BotMessage BotMessage=新的BotMessage();
僵尸消息
.setTitle(“新票证!用户:+creator.getName())
.SetColor(颜色为青色)
.setDescription(“请在此处输入您的完整请求!\n”+
“请确保让我们知道您是否正在寻找报价/时间范围,\n”+
或者考虑预算,我们将与您合作!\n\n+
“销售代表将尽快与您联系!”)
.发送((文本频道)频道);
系统输出打印项次(“log7”);
this.textChannel=(textChannel)通道;
TicketDB.addTicket(本);
系统输出打印项次(“log8”);
}
);
日志:

更新 实现了Future类,工作正常,但仍然有点问题。 它现在完全创建了票据,这很好,但是,当我再次发送相同的呼叫时,出于某种原因,它会在创建下一张票据之前在相同的通道中发送消息

所以,为了模拟

通过AWS Lambda调用函数

完全创建票证

再次通过AWS Lambda调用函数

在前一个tickets频道中发送一两条消息

完全创建新票证

@覆盖
公共SpeechletResponse-OnContent(SpeechletRequestEnvelope-requestEnvelope){
IntentRequest request=requestEnvelope.getRequest();
Intent=request.getIntent();
字符串intentName=(intent!=null)?intent.getName():null;
if(intentName==null)返回null;
交换机(intentName){
案例意向书。新票:
开关(request.getDialogState()){
案件开始:
返回Response.getDialogueResponse(intent,true);
正在进行的案件:
返回Response.getDialogueResponse(intent,false);
个案完成:
String numberString=intent.getSlot(SlotTitle.ID).getValue();
if(!NumberUtils.iscreated(numberString))返回Response.ERROR;
Member Member=Info.GUILD.getMemberById(numberString);
User sender=UserDB.getUser(成员);
系统输出打印项次(“log1”);
Future commissionTicket=新的commissionTicket(发件人).create();
试一试{
获取(10000,时间单位毫秒);
}捕获(例外e){
e、 printStackTrace();
}
public void create() {
    System.out.println("log2");
    GuildController guildController = Info.GUILD.getController();

    guildController.createTextChannel(ticketType.name().toLowerCase() + "-" + creator.getName() + "-" + id.value()).queue(channel -> {
        System.out.println("log3");
                ChannelManager channelManager = channel.getManager();
                GuildManager guildManager = channelManager.getGuild().getManager();
                List<Member> members = guildManager.getGuild().getMembers();
                List<Member> admins = new ArrayList<>();

                for (Member member : members) {
                    for (Role role : member.getRoles()) {
                        if (!role.getName().equalsIgnoreCase(Info.ADMIN_STRING)) continue;
                        admins.add(member);
                    }
                }
        System.out.println("log4");
                for (Member member : members) {
                    if (member.equals(creator.getMember())) continue;
                    channel.createPermissionOverride(member).setDeny(Permission.MESSAGE_READ).queue();
                }
        System.out.println("log5");

                for (Member admin : admins) {
                    if (admin.equals(creator.getMember())) continue;
                    channel.createPermissionOverride(admin).setAllow(Permission.MESSAGE_READ).queue();
                }
        System.out.println("log6");

                BotMessage botMessage = new BotMessage();
                botMessage
                        .setTitle("New Ticket! User: " + creator.getName())
                        .setColour(Color.CYAN)
                        .setDescription("Please enter your full request here! \n" +
                                "Make sure to let us know whether you are looking for a quote/timeframe,\n" +
                                "or have a budget in mind, and we will work around you!\n\n" +
                                "A sales representative will be with you as soon as possible!")
                        .send((TextChannel) channel);
        System.out.println("log7");

                this.textChannel = (TextChannel) channel;

                TicketDB.addTicket(this);
        System.out.println("log8");
            }
    );
@Override
public SpeechletResponse onIntent(SpeechletRequestEnvelope<IntentRequest> requestEnvelope) {
    IntentRequest request = requestEnvelope.getRequest();

    Intent intent = request.getIntent();
    String intentName = (intent != null) ? intent.getName() : null;

    if (intentName == null) return null;

    switch (intentName) {
        case IntentTitle.NEW_TICKET:

            switch (request.getDialogState()) {
                case STARTED:
                    return Response.getDialogueResponse(intent, true);
                case IN_PROGRESS:
                    return Response.getDialogueResponse(intent, false);
                case COMPLETED:
                    String numberString = intent.getSlot(SlotTitle.ID).getValue();
                    if (!NumberUtils.isCreatable(numberString)) return Response.ERROR;

                    Member member = Info.GUILD.getMemberById(numberString);
                    User sender = UserDB.getUser(member);

                    System.out.println("log1");

                    Future<Ticket> commissionTicket = new CommissionTicket(sender).create();
                    try {
                        commissionTicket.get(10000, TimeUnit.MILLISECONDS);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    //wait until processes finish before continuing

                    return Response.NEW_TICKED_CREATED;
            }
    }

    return null;
}
public Future<Ticket> create() {
    System.out.println("log2");
    GuildController guildController = Info.GUILD.getController();
    RequestFuture<Channel> channelRequestFuture = guildController.createTextChannel(ticketType.name().toLowerCase() + "-" + creator.getName() + "-" + id.value()).submit();
    try {
        Channel channel = channelRequestFuture.get(10000, TimeUnit.MILLISECONDS);
                    System.out.println("log3");
        ChannelManager channelManager = channel.getManager();
        GuildManager guildManager = channelManager.getGuild().getManager();
        List<Member> members = guildManager.getGuild().getMembers();
        List<Member> admins = new ArrayList<>();

        for (Member member : members) {
            for (Role role : member.getRoles()) {
                if (!role.getName().equalsIgnoreCase(Info.ADMIN_STRING)) continue;
                admins.add(member);
            }
        }
        System.out.println("log4");
        for (Member member : members) {
            if (member.equals(creator.getMember())) continue;
            channel.createPermissionOverride(member).setDeny(Permission.MESSAGE_READ).queue();
        }
        System.out.println("log5");

        for (Member admin : admins) {
            if (admin.equals(creator.getMember())) continue;
            channel.createPermissionOverride(admin).setAllow(Permission.MESSAGE_READ).queue();
        }
        System.out.println("log6");

        BotMessage botMessage = new BotMessage();
        botMessage
                .setTitle("New Ticket! User: " + creator.getName())
                .setColour(Color.CYAN)
                .setDescription("Please enter your full request here! \n" +
                        "Make sure to let us know whether you are looking for a quote/timeframe,\n" +
                        "or have a budget in mind, and we will work around you!\n\n" +
                        "A sales representative will be with you as soon as possible!")
                .send((TextChannel) channel);
        System.out.println("log7");

        this.textChannel = (TextChannel) channel;

        TicketDB.addTicket(this);
        System.out.println("log8");
        Future<Ticket> future = ConcurrentUtils.constantFuture(this);
        return future;
    } catch (Exception e) {
        e.printStackTrace();
    }

    if (!userIsInTicket(creator)) users.add(creator);
    return null;

}