Files
z-docs/docs/tutorial-basics/create-connection.md

178 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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