[Artículos de código] Cree su propio marco de golang paso a paso desde cero (7)

El objetivo de este marco es ser un marco general, espero que sea amplio y completo, y que pueda usarse directamente como plantilla básica para otros proyectos en el futuro. En este artículo, agregaré una función de cola.

nsq

Hay muchos tipos de colas, elijo nsq. Use nsq necesita conocer los siguientes conceptos:

  1. nsqd: el componente responsable de mantener la cola, aceptar la cola y entrega de mensajes;
  2. nsqlookupd: gestiona los componentes del clúster nsq;
  3. nsqadmin: componente de gestión web de nsq;
  4. tema: una colección de mensajes. Para generar un mensaje, debe especificar a qué tema pertenece el mensaje;
  5. canal: una copia del mensaje de la cola. El consumidor nsq establece un canal con nsqd o nsqlookupd, y escucha los mensajes en el canal para lograr el consumo.

Después de comprender algunos conceptos básicos de nsq, primero configuramos el entorno nsq. Aquí todavía usamos docker-compose.

version: '3'
services:
  nsqlookupd:
    image: nsqio/nsq
    command: /nsqlookupd
    networks:
      - nsq-network
    hostname: nsqlookupd
    ports:
      - "4161:4161"
      - "4160:4160"
  nsqd:
    image: nsqio/nsq
    command: /nsqd --lookupd-tcp-address=nsqlookupd:4160 --broadcast-address=nsqd
    depends_on:
      - nsqlookupd
    hostname: nsqd
    networks:
      - nsq-network
    ports:
      - "4151:4151"
      - "4150:4150"
  nsqadmin:
    image: nsqio/nsq
    command: /nsqadmin --lookupd-http-address=nsqlookupd:4161
    depends_on:
      - nsqlookupd
    hostname: nsqadmin
    ports:
      - "4171:4171"
    networks:
      - nsq-network

networks:
  nsq-network:
    driver: bridge

Después de iniciar el servicio nsq, simplemente verificamos y publicamos un mensaje en nsq:

curl -d 'hello awesome' 'http://127.0.0.1:4151/pub?topic=awesome'

Visita del navegador: http: // localhost: 4171 / , también podemos ver el tema correspondiente y la generación.
nsqadmin.png

Luego modificamos el código, las viejas reglas, primero cambiamos la configuración:

"nsq_config":
  "topic": "awesome"
  "channel": "ch"
  "nsqlookupd_addr": "127.0.0.1:4161"
type NsqConfig struct {
	Topic          string `yaml:"topic"`
	Channel        string `yaml:"channel"`
	NsqLookupdAddr string `yaml:"nsqlookupd_addr"`
}

Luego agregue una función para iniciar el consumidor mq en mq.go:

func StartMqServer() {
	conf := nsq.NewConfig()
	q, _ := nsq.NewConsumer(config.GetConfig().NsqConfig.Topic, config.GetConfig().NsqConfig.Channel, conf)
	q.AddHandler(nsq.HandlerFunc(func(message *nsq.Message) error {
		//do something when you receive a message
		logger.GetLogger().Info("receive", zap.String(config.GetConfig().NsqConfig.Topic, string(message.Body)))
		return nil
	}))
	err := q.ConnectToNSQLookupd(config.GetConfig().NsqConfig.NsqLookupdAddr)
	if err != nil {
		logger.GetLogger().Error("connect to nsqlookupd failed.", zap.Error(err))
		os.Exit(-1)
	}
}

También en el archivo de entrada, inícielo:

go mq.StartMqServer()

Finalmente, escribimos un productor, generamos un mensaje y probamos:

func TestProducer(t *testing.T)  {
	config := nsq.NewConfig()
	p, err := nsq.NewProducer("127.0.0.1:4150", config)

	if err != nil {
		log.Panic(err)
	}

	err = p.Publish("awesome", []byte("hello awesome"))
	if err != nil {
		log.Panic(err)
	}
}

Para ver el código completo, consulte: https://github.com/TomatoMr/awesomeframework .


Bienvenido a prestar atención a mi número público: onepunchgo, déjame un mensaje.

imagen

20 artículos originales publicados · Me gusta0 · Visitas 764

Supongo que te gusta

Origin blog.csdn.net/qq_31362439/article/details/104339693
Recomendado
Clasificación