快速入门
Phoenix框架提供Spring Boot Starter可以很快速帮助用户构建应用。
服务提供者
服务提供者案例,请参见:PhoenixIQ/phoenix-samples/hello-world
maven依赖
<dependency>
<groupId>com.iquantex</groupId>
<artifactId>phoenix-server-starter</artifactId>
<version>2.2.4</version>
</dependency>
<!-- 2.2.2版本之后需要手动导入JDBC-EventStore的包才可使用-->
<dependency>
<groupId>com.iquantex</groupId>
<artifactId>phoenix-eventstore-jdbc</artifactId>
<version>2.2.4</version>
</dependency>
消息定义
聚合根接收cmd产生event
command定义
Phoenix支持protobuf
协议和javaBean
协议进行序列化,这里使用javaBean
协议进行示范
@Data
@NoArgsConstructor
@AllArgsConstructor
public class HelloCmd implements Serializable {
/** hello 指令id */
private String helloId;
}
event定义
@Data
@NoArgsConstructor
@AllArgsConstructor
public class HelloEvent implements Serializable {
/** hello 指令id */
private String helloId;
}
定义聚合根
聚合根类定义规则:
- 聚合根类需要使用
@EntityAggregateAnnotation
进行标记 - 聚合根类需要实现
Serializable
接口 - 接收command方法只能包含一个cmd参数且方法名必须为
act
返回值为ActReturn
act
方法前需要增加@CommandHandler
或@QueryHandler
,其中aggregateRootId
为聚合根id- 接收event方法只能包含一个event参数,方法名称必须为
on
返回值为void
/**
* hello 聚合根
*/
@Slf4j
@Data
@EntityAggregateAnnotation(aggregateRootType = "Hello")
public class HelloAggregate implements Serializable {
private static final long serialVersionUID = -1L;
/** 状态: 计数器 */
private long num;
/**
* 处理hello指令,产生HelloEvent
* @param cmd hello 指令
* @return 处理结果
*/
@CommandHandler(aggregateRootId = "helloId")
public ActReturn act(Hello.HelloCmd cmd) {
return ActReturn.builder().retCode(RetCode.SUCCESS).retMessage("Hello World Phoenix...")
.event(Hello.HelloEvent.newBuilder().setHelloId(cmd.getHelloId()).build()).build();
}
/**
* 处理helloEvent
* @param event hello事件
*/
public void on(Hello.HelloEvent event) {
num++;
log.info("Phoenix State: {}", num);
}
}
配置文件
在springboot配置文件中增加phoenix的相关配置
quantex:
phoenix:
server:
name: ${spring.application.name} # 服务名称
mq:
type: kafka # mq类型
address: 127.0.0.1 # mq服务地址
subscribe-topic: account-server
event-store:
driver-class-name: org.h2.Driver # 数据库驱动
data-sources:
- url: jdbc:h2:file:./data/test;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS PUBLIC # 数据库链接url
username: sa # 数据库账户
password: # 数据库密码
服务调用者
Maven依赖
<dependency>
<groupId>com.iquantex</groupId>
<artifactId>phoenix-client-starter</artifactId>
<version>2.2.4</version>
</dependency>
调用服务
增加phoenix-client-starter
依赖启动服务后phoenix会自动注入PhoenixClient,可以通过调用PhoenixClient的send方法调用phoenix服务
@Autowired
private PhoenixClient client;
public String send(tring helloId) {
Hello.HelloCmd helloCmd = Hello.HelloCmd.newBuilder().setHelloId(helloId).build();
client.send(helloCmd, "target_topic", "");
}
配置文件
quantex:
phoenix:
client:
name: ${spring.application.name}-client # 服务名称
mq:
type: kafka # mq类型
address: 127.0.0.1:9092 # mq地址:embedded表示使用内存kafka