dami2 - lpc 方法参数编解码配置
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");