You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pousse-Café框架新增Command后出现实现冲突运行时错误

解决Pousse-Café中Command的消息实现冲突问题

你遇到的核心问题是错误地在Command接口上标注了@MessageImplementation注解,导致Pousse-Café运行时认为同一个消息接口存在多个冲突的实现。

问题根源分析

Pousse-Café的@MessageImplementation注解是用来标记消息接口的具体实现类的,而不是消息接口本身。你在UpdateAvailablity接口上添加了这个注解,同时又在UpdateAvailablityData实现类上也加了同样的注解,这就导致框架检测到两个指向同一个消息接口的“实现”,直接触发了冲突异常。

修正方案

只需要移除Command接口上的@MessageImplementation注解,保留实现类上的即可:

修正后的Command接口代码

public interface UpdateAvailablity extends Command {
    Attribute<UserId> id();
    Attribute<Boolean> availablity();
}

保持不变的实现类代码

@SuppressWarnings("serial")
@MessageImplementation(message = UpdateAvailablity.class)
public class UpdateAvailablityData implements Serializable, UpdateAvailablity {

    @Override
    public Attribute<UserId> id() {
        return AttributeBuilder
                .stringId(UserId.class)
                .read(() -> id)
                .write(value -> id = value)
                .build();
    }

    private String id;

    @Override
    public Attribute<Boolean> availablity() {
        return AttributeBuilder
                .single(Boolean.class)
                .read(() -> availablity)
                .write(value -> availablity = value)
                .build();
    }

    private boolean availablity;
}

额外注意事项

  • 消息接口(比如你的UpdateAvailablity)只需要定义命令的属性契约,不需要任何实现相关的注解。
  • 只有具体的实现类(比如UpdateAvailablityData)才需要用@MessageImplementation来关联对应的消息接口,让框架识别这是该消息的有效实现。

内容的提问来源于stack exchange,提问作者GDethier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 06:13:14