Some checks failed
go: build dev binaries / cleanup (push) Successful in 4s
Codespell / Check for spelling errors (push) Failing after 3s
docker: build dev containers / build-rust-binaries (amd64, x86_64-unknown-linux-musl) (push) Failing after 3s
docker: build dev containers / build-dev-containers (push) Has been skipped
docker: build dev containers / build-rust-binaries (arm64, true, aarch64-unknown-linux-musl) (push) Failing after 3s
End to End / FUSE Mount (push) Failing after 2s
EC Integration Tests / EC Integration Tests (push) Failing after 30s
FUSE DLM Integration Tests / FUSE DLM Integration Tests (push) Failing after 3s
FUSE Volume Server Failover Tests / FUSE Volume Server Failover (push) Failing after 3s
FUSE Integration Tests / FUSE Integration Testing (push) Failing after 2s
FUSE P2P Peer Chunk Sharing Integration Tests / FUSE P2P Peer Chunk Sharing (push) Failing after 3s
go: build binary / Go Vet (push) Failing after 2s
go: build binary / Go Vet 32-bit (push) Failing after 3s
go: build binary / Build (push) Failing after 4s
go: build binary / Build cross-platform (freebsd/amd64) (push) Failing after 3s
go: build binary / Build cross-platform (windows/amd64) (push) Failing after 3s
go: build binary / Build cross-platform (darwin/arm64) (push) Failing after 3s
go: build binary / Build cross-platform (windows/arm64) (push) Failing after 3s
go: build binary / Test (push) Failing after 2s
go: build binary / Test 32-bit (push) Failing after 3s
helm: lint and test charts / lint-test (push) Failing after 3s
Java Client Integration Tests / Java Integration Tests (11) (push) Failing after 3s
Java Client Integration Tests / Java Integration Tests (17) (push) Failing after 3s
go: build dev binaries / build_dev_linux_windows (amd64, linux) (push) Failing after 2s
go: build dev binaries / build_dev_linux_windows (amd64, windows) (push) Failing after 3s
go: build dev binaries / build_dev_darwin (amd64, darwin) (push) Has been skipped
go: build dev binaries / build_dev_darwin (arm64, darwin) (push) Has been skipped
Java Client Unit Tests / Java Unit Tests (11) (push) Failing after 3s
Java Client Unit Tests / Java Unit Tests (17) (push) Failing after 2s
Java Client Unit Tests / Java Unit Tests (21) (push) Failing after 3s
Java Client Unit Tests / Java Unit Tests (8) (push) Failing after 3s
Kafka Quick Test (Load Test with Schema Registry) / Kafka Client Load Test (Quick) (push) Failing after 3s
Kafka Gateway Tests / Kafka Unit Tests (unit-tests-1) (push) Failing after 11s
Kafka Gateway Tests / Kafka Integration Tests (Critical) (integration-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka End-to-End Tests (with SMQ) (e2e-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka Consumer Group Tests (Highly Isolated) (consumer-group-1) (push) Failing after 2s
Kafka Gateway Tests / Kafka Client Compatibility (with SMQ) (client-compat-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka SMQ Integration Tests (Full Stack) (smq-integration-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka Protocol Tests (Isolated) (protocol-1) (push) Failing after 3s
KMS Tests / KMS Provider Integration Tests (push) Failing after 2s
KMS Tests / S3 KMS End-to-End Tests (push) Failing after 3s
Master Cold Start Tests / Master Cold Start Tests (push) Failing after 4s
Metadata Subscribe Integration Tests / Metadata Subscribe Integration Tests (push) Failing after 3s
Multi-Master Tests / Multi-Master Failover Tests (push) Failing after 3s
Performance / CPU and Heap Profile (push) Failing after 2s
Performance / S3 Read/Write Benchmark (rust volume) (push) Failing after 3s
pjdfstest POSIX Compliance / pjdfstest (push) Failing after 2s
Plugin Worker Integration Tests / Plugin Worker: erasure_coding (push) Failing after 3s
Plugin Worker Integration Tests / Plugin Worker: vacuum (push) Failing after 3s
Rust Volume Server Tests / Rust Integration Tests (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 1) (push) Failing after 2s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 1) (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 2) (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 2) (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 3) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Distributed Tests (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Performance Tests (push) Failing after 3s
Performance / Throughput Benchmark (go volume) (push) Failing after 3s
Performance / Throughput Benchmark (rust volume) (push) Failing after 2s
Performance / S3 Read/Write Benchmark (go volume) (push) Failing after 3s
Plugin Worker Integration Tests / Plugin Worker: volume_balance (push) Failing after 3s
PostgreSQL Gateway Tests / PostgreSQL Basic Tests (push) Failing after 3s
Rust Volume Server Tests / Rust Unit Tests (push) Failing after 2s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 3) (push) Failing after 3s
Rust Plugin Worker Tests / Rust Plugin Worker Build and Unit Tests (push) Failing after 3s
rust: build dev volume server binaries / cleanup (push) Successful in 3s
S3 ETag and ACL Tests / S3 ETag + ACL Integration Tests (push) Failing after 3s
S3 IAM Integration Tests / IAM Unit Tests (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (advanced) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (basic) (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Integration Tests (group) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (policy-enforcement) (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Integration Tests (sts) (push) Failing after 4s
S3 Keycloak Integration Tests / S3 Keycloak Integration Tests (push) Failing after 3s
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.11) (push) Failing after 3s
S3 PyArrow Parquet Tests / Go Unit Tests (Implicit Directory) (push) Has been cancelled
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.12) (push) Has been cancelled
rust: build dev volume server binaries / build-rust-volume-dev-darwin (darwin-amd64, x86_64-apple-darwin) (push) Has been cancelled
rust: build dev volume server binaries / build-rust-volume-dev-darwin (darwin-arm64, aarch64-apple-darwin) (push) Has been cancelled
rust: build dev volume server binaries / build-rust-volume-dev-linux (linux-amd64, x86_64-unknown-linux-gnu) (push) Has been cancelled
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.9) (push) Has been cancelled
S3 Proxy Signature Tests / S3 Proxy Signature Verification Tests (push) Has been cancelled
S3 SDK V2 Route Disambiguation Tests / S3 SDK V2 Routing Tests (push) Has been cancelled
S3 SSE Tests / S3 SSE Integration Tests (quick) (push) Has been cancelled
S3 SSE Tests / S3 SSE Compatibility Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Metadata Persistence Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Copy Operations Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Multipart Upload Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Performance Test (push) Has been cancelled
S3 SSE Tests / S3 Volume Encryption Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Integration Tests (comprehensive) (push) Has been cancelled
Spark Integration Tests / Spark Integration Tests (push) Failing after 2s
Telemetry Integration Tests / telemetry-integration-test (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (grpc - Shard 1) (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (http - Shard 1) (push) Failing after 3s
Ceph S3 tests / Basic S3 tests (KV store) (push) Has been cancelled
Ceph S3 tests / S3 Versioning & Object Lock tests (push) Has been cancelled
S3 Policy Integration Tests / S3 Policy Unit Tests (push) Failing after 3s
Ceph S3 tests / S3 CORS tests (push) Has been cancelled
Ceph S3 tests / SeaweedFS Custom S3 Copy tests (push) Has been cancelled
Ceph S3 tests / Basic S3 tests (SQL store) (push) Has been cancelled
test s3 over https using aws-cli / awscli-tests (push) Has been cancelled
TLS Rotation Integration Tests / TLS Rotation Integration Tests (push) Has been cancelled
Vacuum Integration Tests / Vacuum Integration Tests (push) Has been cancelled
S3 Policy Integration Tests / S3 Policy Variables Integration Tests (push) Failing after 3s
S3 Policy Integration Tests / S3 Policy Enforcement Integration Tests (advanced-policy) (push) Failing after 3s
S3 Policy Integration Tests / S3 Policy Enforcement Integration Tests (basic-policy) (push) Failing after 2s
S3 Policy Integration Tests / S3 Policy Enforcement Integration Tests (contextual-policy) (push) Failing after 4s
S3 Policy Integration Tests / Trusted Proxy Detection Tests (push) Failing after 2s
S3 Policy Integration Tests / S3 Policy Shell Integration Tests (push) Failing after 3s
Samba on FUSE Integration / samba-integration (push) Failing after 2s
SFTP Integration Tests / SFTP Integration Testing (push) Failing after 3s
terraform: validate and test modules / fmt, validate, plan-level tests (push) Failing after 3s
terraform: validate and test modules / local cluster smoke test (real weed) (push) Failing after 2s
Volume Server Integration Tests / Volume Server Integration Tests (grpc - Shard 3) (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (grpc - Shard 2) (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (http - Shard 2) (push) Failing after 2s
Volume Server Integration Tests / Volume Server Integration Tests (http - Shard 3) (push) Failing after 5s
mount: windows conformance / WinFsp conformance (push) Has been cancelled
mount: windows / Mount on Windows (push) Has been cancelled
244 lines
6.6 KiB
Markdown
244 lines
6.6 KiB
Markdown
# SeaweedFS Message Queue Test Suite
|
|
|
|
This directory contains test programs for SeaweedFS Message Queue (MQ) functionality, including message producers and consumers.
|
|
|
|
## Prerequisites
|
|
|
|
1. **SeaweedFS with MQ Broker and Agent**: You need a running SeaweedFS instance with MQ broker and agent enabled
|
|
2. **Go**: Go 1.19 or later required for building the test programs
|
|
|
|
## Quick Start
|
|
|
|
### 1. Start SeaweedFS with MQ Broker and Agent
|
|
|
|
```bash
|
|
# Start SeaweedFS server with MQ broker and agent
|
|
weed server -mq.broker -mq.agent -filer -volume -master.peers=none
|
|
|
|
# Or start components separately
|
|
weed master -peers=none
|
|
weed volume -master=localhost:9333
|
|
weed filer -master=localhost:9333
|
|
weed mq.broker -filer=localhost:8888
|
|
weed mq.agent -brokers=localhost:17777
|
|
```
|
|
|
|
### 2. Build Test Programs
|
|
|
|
```bash
|
|
# Build both producer and consumer
|
|
make build
|
|
|
|
# Or build individually
|
|
make build-producer
|
|
make build-consumer
|
|
```
|
|
|
|
### 3. Run Basic Test
|
|
|
|
```bash
|
|
# Run a basic producer/consumer test
|
|
make test
|
|
|
|
# Or run producer and consumer manually
|
|
make consumer & # Start consumer in background
|
|
make producer # Start producer
|
|
```
|
|
|
|
## Test Programs
|
|
|
|
### Producer (`producer/main.go`)
|
|
|
|
Generates structured messages and publishes them to a SeaweedMQ topic via the MQ agent.
|
|
|
|
**Usage:**
|
|
```bash
|
|
./bin/producer [options]
|
|
```
|
|
|
|
**Options:**
|
|
- `-agent`: MQ agent address (default: localhost:16777)
|
|
- `-namespace`: Topic namespace (default: test)
|
|
- `-topic`: Topic name (default: test-topic)
|
|
- `-partitions`: Number of partitions (default: 4)
|
|
- `-messages`: Number of messages to produce (default: 100)
|
|
- `-publisher`: Publisher name (default: test-producer)
|
|
- `-size`: Message size in bytes (default: 1024)
|
|
- `-interval`: Interval between messages (default: 100ms)
|
|
|
|
**Example:**
|
|
```bash
|
|
./bin/producer -agent=localhost:16777 -namespace=test -topic=my-topic -messages=1000 -interval=50ms
|
|
```
|
|
|
|
### Consumer (`consumer/main.go`)
|
|
|
|
Consumes structured messages from a SeaweedMQ topic via the MQ agent.
|
|
|
|
**Usage:**
|
|
```bash
|
|
./bin/consumer [options]
|
|
```
|
|
|
|
**Options:**
|
|
- `-agent`: MQ agent address (default: localhost:16777)
|
|
- `-namespace`: Topic namespace (default: test)
|
|
- `-topic`: Topic name (default: test-topic)
|
|
- `-group`: Consumer group name (default: test-consumer-group)
|
|
- `-instance`: Consumer group instance ID (default: test-consumer-1)
|
|
- `-max-partitions`: Maximum number of partitions to consume (default: 10)
|
|
- `-window-size`: Sliding window size for concurrent processing (default: 100)
|
|
- `-offset`: Offset type: earliest, latest, timestamp (default: latest)
|
|
- `-offset-ts`: Offset timestamp in nanoseconds (for timestamp offset type)
|
|
- `-filter`: Message filter (default: empty)
|
|
- `-show-messages`: Show consumed messages (default: true)
|
|
- `-log-progress`: Log progress every 10 messages (default: true)
|
|
|
|
**Example:**
|
|
```bash
|
|
./bin/consumer -agent=localhost:16777 -namespace=test -topic=my-topic -group=my-group -offset=earliest
|
|
```
|
|
|
|
## Makefile Commands
|
|
|
|
### Building
|
|
- `make build`: Build both producer and consumer binaries
|
|
- `make build-producer`: Build producer only
|
|
- `make build-consumer`: Build consumer only
|
|
|
|
### Running
|
|
- `make producer`: Build and run producer
|
|
- `make consumer`: Build and run consumer
|
|
- `make run-producer`: Run producer directly with go run
|
|
- `make run-consumer`: Run consumer directly with go run
|
|
|
|
### Testing
|
|
- `make test`: Run basic producer/consumer test
|
|
- `make test-performance`: Run performance test (1000 messages, 8 partitions)
|
|
- `make test-multiple-consumers`: Run test with multiple consumers
|
|
|
|
### Cleanup
|
|
- `make clean`: Remove build artifacts
|
|
|
|
### Help
|
|
- `make help`: Show detailed help
|
|
|
|
## Configuration
|
|
|
|
Configure tests using environment variables:
|
|
|
|
```bash
|
|
export AGENT_ADDR=localhost:16777
|
|
export TOPIC_NAMESPACE=test
|
|
export TOPIC_NAME=test-topic
|
|
export PARTITION_COUNT=4
|
|
export MESSAGE_COUNT=100
|
|
export CONSUMER_GROUP=test-consumer-group
|
|
export CONSUMER_INSTANCE=test-consumer-1
|
|
```
|
|
|
|
## Example Usage Scenarios
|
|
|
|
### 1. Basic Producer/Consumer Test
|
|
|
|
```bash
|
|
# Terminal 1: Start consumer
|
|
make consumer
|
|
|
|
# Terminal 2: Run producer
|
|
make producer MESSAGE_COUNT=50
|
|
```
|
|
|
|
### 2. Performance Testing
|
|
|
|
```bash
|
|
# Test with high throughput
|
|
make test-performance
|
|
```
|
|
|
|
### 3. Multiple Consumer Groups
|
|
|
|
```bash
|
|
# Terminal 1: Consumer group 1
|
|
make consumer CONSUMER_GROUP=group1
|
|
|
|
# Terminal 2: Consumer group 2
|
|
make consumer CONSUMER_GROUP=group2
|
|
|
|
# Terminal 3: Producer
|
|
make producer MESSAGE_COUNT=200
|
|
```
|
|
|
|
### 4. Different Offset Types
|
|
|
|
```bash
|
|
# Consume from earliest
|
|
make consumer OFFSET=earliest
|
|
|
|
# Consume from latest
|
|
make consumer OFFSET=latest
|
|
|
|
# Consume from timestamp
|
|
make consumer OFFSET=timestamp OFFSET_TS=1699000000000000000
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
1. **Connection Refused**: Make sure SeaweedFS MQ agent is running on the specified address
|
|
2. **Agent Not Found**: Ensure both MQ broker and agent are running (agent requires broker)
|
|
3. **Topic Not Found**: The producer will create the topic automatically on first publish
|
|
4. **Consumer Not Receiving Messages**: Check if consumer group offset is correct (try `earliest`)
|
|
5. **Build Failures**: Ensure you're running from the SeaweedFS root directory
|
|
|
|
### Debug Mode
|
|
|
|
Enable verbose logging:
|
|
```bash
|
|
# Run with debug logging
|
|
GLOG_v=4 make producer
|
|
GLOG_v=4 make consumer
|
|
```
|
|
|
|
### Check Broker and Agent Status
|
|
|
|
```bash
|
|
# Check if broker is running
|
|
curl http://localhost:9333/cluster/brokers
|
|
|
|
# Check if agent is running (if running as server)
|
|
curl http://localhost:9333/cluster/agents
|
|
|
|
# Or use weed shell
|
|
weed shell -master=localhost:9333
|
|
> mq.broker.list
|
|
```
|
|
|
|
## Architecture
|
|
|
|
The test setup demonstrates:
|
|
|
|
1. **Agent-Based Architecture**: Uses MQ agent as intermediary between clients and brokers
|
|
2. **Structured Messages**: Messages use schema-based RecordValue format instead of raw bytes
|
|
3. **Topic Management**: Creating and configuring topics with multiple partitions
|
|
4. **Message Production**: Publishing structured messages with keys for partitioning
|
|
5. **Message Consumption**: Consuming structured messages with consumer groups and offset management
|
|
6. **Load Balancing**: Multiple consumers in same group share partition assignments
|
|
7. **Fault Tolerance**: Graceful handling of agent and broker failures and reconnections
|
|
|
|
## Files
|
|
|
|
- `producer/main.go`: Message producer implementation
|
|
- `consumer/main.go`: Message consumer implementation
|
|
- `Makefile`: Build and test automation
|
|
- `README.md`: This documentation
|
|
- `bin/`: Built binaries (created during build)
|
|
|
|
## Next Steps
|
|
|
|
1. Modify the producer to send structured data using `RecordType`
|
|
2. Implement message filtering in the consumer
|
|
3. Add metrics collection and monitoring
|
|
4. Test with multiple broker instances
|
|
5. Implement schema evolution testing |