【问题标题】:appengine ChannelFailureException is not thrown in devappengine ChannelFailureException 未在 dev 中引发
【发布时间】:2012-05-29 02:44:34
【问题描述】:

AppEngine 应该在向通道发送消息时出现错误时抛出 ChannelFailureException,例如当通道未连接时。

好像开发服务器没有抛出这个异常。它确实在控制台中显示警告:

com.google.appengine.api.channel.dev.ChannelManager sendMessage
WARNING: Skipping message to unconnected channel: <clientId>

此警告似乎是由以下原因生成的: com.google.appengine.api.channel.dev.LocalChannelFailureException

但是,实际的异常(即 com.google.appengine.api.channel.ChannelFailureException)并未引发。有没有人知道如何在开发中测试这个异常?

【问题讨论】:

    标签: java google-app-engine channel-api


    【解决方案1】:

    如果通道未连接并且您尝试向其发送消息,则预计不会引发错误。

    如果您提供了格式错误的客户端 ID 或消息,或者 Channel 基础结构存在问题导致无法发送消息,则会引发 ChannelFailureException。

    【讨论】:

    • 好的,那么上述行为是否只存在于开发环境中?您能否详细说明为什么会显示 WARNING: Skipping message to unconnected channel: 。仅当通道未连接(即用户已退出)时才会显示此警告。 clientId 和消息格式正确。如果用户已登录,则使用相同的 clientId 和消息发送消息而不会发出警告。
    • 警告仅供参考。它不会在生产中发生。
    • 哦,好的。这样当 Channel 基础设施失败时就会抛出异常。那么,当这种情况发生时,我们能做的最多是什么?我们应该重试发送消息吗?而且由于没有在开发中引发异常,我想唯一的测试方法(如果可能的话)是上传并尝试直到它抛出该异常?
    • 如果生产中发生此错误,您可以重试发送,是的。为了进行测试,我建议在 Python 中模拟 channel 模块,或者在 Java 中模拟 ChannelService 对象。
    【解决方案2】:

    当您混淆令牌和 clientId 时也会出现此状态。就我而言,这是因为我试图创建一个

    message = ChannelMessage(token, message);
    

    而不是

    message = ChannelMessage(clientId, message);
    

    在哪里

    String token = channelService.createChannel(clientId);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-30
      • 2011-06-14
      • 1970-01-01
      • 2013-10-25
      • 2017-08-07
      • 1970-01-01
      相关资源
      最近更新 更多