178 lines
3.5 KiB
Markdown
178 lines
3.5 KiB
Markdown
---
|
||
sidebar_position: 1
|
||
title: 创建连接
|
||
description: 初始化客户端连接对象
|
||
---
|
||
|
||
import Tabs from '@theme/Tabs';
|
||
import TabItem from '@theme/TabItem';
|
||
|
||
## 支持的框架
|
||
|
||
普通Java、SpringBoot、Redkale、Golang
|
||
|
||
<Tabs>
|
||
<TabItem value="java" label="普通Java项目" default>
|
||
|
||
```java
|
||
private ZHubClient zhub;
|
||
|
||
@Before
|
||
public void init() {
|
||
// 参数:地址、组名、appid(唯一)、token
|
||
zhub = new ZHubClient("127.0.0.1:1216", "test-hub", "DEV-LOCAL-001", "token-12345");
|
||
}
|
||
```
|
||
|
||
**说明**:
|
||
- `appid` 必须唯一,RPC 消息回复使用此标识
|
||
- `groupid` 协同消费组,同组内只有一个消费者处理消息
|
||
|
||
</TabItem>
|
||
<TabItem value="spring" label="SpringBoot项目">
|
||
|
||
**1. 依赖**
|
||
```xml
|
||
<dependency>
|
||
<groupId>dev.zhub</groupId>
|
||
<artifactId>zhub-client-spring</artifactId>
|
||
<version>0.1.0424.dev</version>
|
||
</dependency>
|
||
```
|
||
|
||
**2. 配置 application.yml**
|
||
```yaml
|
||
zhub:
|
||
addr: 127.0.0.1:1216
|
||
groupid: spring-boot-app
|
||
appid: spring-boot-001 # 必须唯一
|
||
auth: token-12345
|
||
```
|
||
|
||
**3. 配置类**
|
||
```java
|
||
@Configuration
|
||
public class ZHubConfig {
|
||
@Value("${zhub.addr}") private String addr;
|
||
@Value("${zhub.groupid}") private String groupId;
|
||
@Value("${zhub.appid}") private String appId;
|
||
@Value("${zhub.auth}") private String auth;
|
||
|
||
@Bean
|
||
public ZHubClient zhubClient() {
|
||
return new ZHubClient(addr, groupId, appId, auth);
|
||
}
|
||
}
|
||
```
|
||
|
||
**4. 使用**
|
||
```java
|
||
@Service
|
||
public class UserService {
|
||
@Autowired
|
||
private ZHubClient zhub;
|
||
|
||
public void publishEvent(String userId, String event) {
|
||
zhub.publish("user-event", "{\"userId\":\"" + userId + "\",\"event\":\"" + event + "\"}");
|
||
}
|
||
|
||
@PostConstruct
|
||
public void init() {
|
||
zhub.subscribe("user-notification", message -> {
|
||
System.out.println("通知: " + message);
|
||
});
|
||
}
|
||
}
|
||
```
|
||
|
||
</TabItem>
|
||
<TabItem value="redkale" label="Redkale项目">
|
||
|
||
**配置文件**:
|
||
```properties
|
||
# source.properties
|
||
redkale.cluster.zhub[hub].addr = 127.0.0.1:1216
|
||
redkale.cluster.zhub[hub].auth = user@pwd123
|
||
redkale.cluster.zhub[hub].groupid = test-hub
|
||
```
|
||
|
||
**使用**:
|
||
```java
|
||
@Resource(name = "hub")
|
||
protected ZHubClient zhub;
|
||
```
|
||
|
||
</TabItem>
|
||
<TabItem value="golang" label="Golang项目">
|
||
|
||
```go
|
||
// Golang 连接示例
|
||
// TODO: 待补充
|
||
```
|
||
|
||
</TabItem>
|
||
</Tabs>
|
||
|
||
|
||
|
||
## 使用示例
|
||
|
||
<Tabs>
|
||
<TabItem value="subscribe" label="基础订阅" default>
|
||
|
||
```java
|
||
// 单个主题
|
||
zhub.subscribe("user-login", message -> System.out.println("登录: " + message));
|
||
|
||
// 类型化消息(使用TypeToken)
|
||
zhub.subscribe("user-profile", new TypeToken<UserProfile>(){}, profile ->
|
||
System.out.println("用户: " + profile.getUsername()));
|
||
```
|
||
|
||
</TabItem>
|
||
<TabItem value="multi" label="多主题订阅">
|
||
|
||
```java
|
||
// 逗号分隔
|
||
zhub.subscribe("user-login,user-logout,user-register", message ->
|
||
System.out.println("用户操作: " + message));
|
||
```
|
||
|
||
</TabItem>
|
||
<TabItem value="publish" label="发布消息">
|
||
|
||
```java
|
||
// 字符串消息
|
||
zhub.publish("user-login", "用户ID: 12345");
|
||
|
||
// 类型化消息
|
||
UserProfile profile = new UserProfile("12345", "张三", "zhangsan@example.com");
|
||
zhub.publish("user-profile", profile);
|
||
```
|
||
|
||
</TabItem>
|
||
</Tabs>
|
||
|
||
## 性能优化
|
||
|
||
### 异步处理
|
||
```java
|
||
// 避免阻塞消息处理
|
||
zhub.subscribe("topic-abc", message -> {
|
||
CompletableFuture.runAsync(() -> {
|
||
processMessage(message);
|
||
});
|
||
});
|
||
```
|
||
|
||
### 错误处理
|
||
```java
|
||
zhub.subscribe("topic-abc", message -> {
|
||
try {
|
||
processMessage(message);
|
||
} catch (Exception e) {
|
||
logger.error("消息处理失败", e);
|
||
}
|
||
});
|
||
```
|