解决问题 : 使用 GraceMQ 记录消息

使用 GraceMQ 记录消息模拟代码

package main

import (
	"fmt"
	"runtime"
	"strconv"
	"sync"
	"time"

	"github.com/cnlesscode/graceMessageQueueClient/client"
)

// 全局变量
var addr string = "192.168.1.100:8881"
var graceMQConnetionPool *client.GraceMQConnectionPool
var wg sync.WaitGroup

func main() {
	// 观察协程
	go func() {
		for {
			fmt.Printf("协程数 : %v\n", runtime.NumGoroutine())
			time.Sleep(time.Second * 3)
		}
	}()
	// 初始化连接池
	graceMQConnetionPool = client.Init(addr, 2000)
	for i := 1; i <= 50000; i++ {
		wg.Add(1)
		go func(step int) {
			defer wg.Done()
			// 生产消息
			res := graceMQConnetionPool.ProductMessage("topic1", "Messsge ["+strconv.Itoa(step)+"]")
			if res.Errcode != 0 {
				fmt.Printf("res.Data: %v\n", res.Data)
			}
		}(i)
	}
	wg.Wait()
	println("--- main done ---")
}

通过上面的代码,我们使用 GraceMQ 很轻松地就记录了5万条数据,丢失0条,服务器压力极小:

1 cpu 使用率 10%;
2 内存使用 < 50m;
3 对 Mysql 服务没有任何影响;

下一节我们将利用 GraceMQ 的消费机制,将数据存放到数据库中,请继续观看。