Solon v3.7.2

dami2 - lpc 方法参数编解码配置

</> markdown

v2.0.2 之前只有 CoderDefault 是内置的(已标为弃用,由 CoderForName 替代)。因为经常有人会忘记 -parameters,或者给参数添加 @Param(name) 注解,所以新加一个内部编码器 CoderForIndex(之前需要外部定制)

新的编解码器选择:

编码器描述当用 lpc 发当用 bus 发
CoderForIndex基于参数序位对齐编码正常调函数Object[] 作为载核
CoderForName基参数名字对齐编码正常调函数Map<String,Object> 作为载核
  • CoderForIndex:要求发送与接收的参数顺序是相同的
  • CoderForName:要求相关模块编译时启用:-parameters,或使用 @Param(name) (dami 包下的)注解

1、配置示例

  • 默认配置
DamiConfig.configure(new CoderForIndex());
  • DamiLpc 实例配置
DamiLpc lpc = new DamiLpcImpl(bus).coder(new CoderForIndex());

2、CoderForName 应用示例

  • for Provider
import org.noear.dami2.annotation.Param;

public class UserServiceImpl {
    public void onCreated(@Param("userId") Long userId, @Param("name") String name) {
        System.err.println("onCreated: userId=" + userId + ", name=" + name);
    }

    public Long getUserId(@Param("name") String name) {
        return 99L;
    }
}

//Provider
Dami.lpc().registerProvider("demo.user", new UserServiceImpl());
  • for Consumer
import org.noear.dami2.annotation.Param;

public interface UserService {
    void onCreated(@Param("userId") Long userId, @Param("name") String name);

    Long getUserId(@Param("name") String name);
}

//Consumer
UserService userService = lpc.createConsumer("demo.user", UserService.class);
Long userId = userService.getUserId("dami");