跳到主要内容
版本:2.2.4

快速入门

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;
}

定义聚合根

聚合根类定义规则:

  1. 聚合根类需要使用@EntityAggregateAnnotation进行标记
  2. 聚合根类需要实现Serializable接口
  3. 接收command方法只能包含一个cmd参数且方法名必须为act返回值为ActReturn
  4. act方法前需要增加@CommandHandler@QueryHandler,其中aggregateRootId为聚合根id
  5. 接收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,可以通过调用PhoenixClientsend方法调用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

相关链接

服务提供者详情

服务调用者详情

配置文件详情