ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

golang rabbitmq 简单模式

2022-06-02 15:04:04  阅读:165  来源: 互联网

标签:ch false err failOnError 模式 golang Failed rabbitmq conn


package main

import (
    "fmt"
    "github.com/streadway/amqp"
    "log"
)

func failOnError(err error, msg string) {
    if err != nil {
        log.Fatalf("%s: %s", msg, err)
    }
}

func getConn() *amqp.Connection {
    conn, err := amqp.Dial("amqp://guest:guest@192.168.1.187:5673/")
    failOnError(err, "Failed to connect to RabbitMQ")
    return conn
}

func push(message string) {
    conn := getConn()
    defer conn.Close()
    ch, err := conn.Channel()
    failOnError(err, "Failed to open a channel")
    defer ch.Close()
    q, err := ch.QueueDeclare(
        "cheng1", // name
        true,     // durable
        false,    // delete when unused
        false,    // exclusive
        false,    // no-wait
        nil,      // arguments
    )
    failOnError(err, "Failed to declare a queue")
    body := message
    err = ch.Publish(
        "",     // exchange
        q.Name, // routing key
        false,  // mandatory
        false,  // immediate
        amqp.Publishing{
            ContentType: "text/plain",
            Body:        []byte(body),
        })
    failOnError(err, "Failed to publish a message")
    fmt.Println(message)
}

func send() {
    conn := getConn()
    defer conn.Close()
    ch, err := conn.Channel()
    failOnError(err, "Failed to open a channel")
    defer ch.Close()
    q, err := ch.QueueDeclare(
        "cheng1", // name
        true,     // durable
        false,    // delete when unused
        false,    // exclusive
        false,    // no-wait
        nil,      // arguments
    )
    failOnError(err, "Failed to declare a queue")
    msgs, err := ch.Consume(
        q.Name, // queue
        "",     // consumer
        false,  // auto-ack
        false,  // exclusive
        false,  // no-local
        false,  // no-wait
        nil,    // args
    )
    failOnError(err, "Failed to register a consumer")

    forever := make(chan bool)

    go func() {
        for d := range msgs {
            log.Printf("Received a message: %s", d.Body)
            fmt.Println(d.DeliveryTag)
            ch.Ack(d.DeliveryTag, true)
        }
    }()

    log.Printf(" [*] Waiting for messages. To exit press CTRL+C")
    <-forever
}

func main() {
    bools := make(chan bool)
    go send()
    //go func() {
    //    for i := 0; i < 1000000; i++ {
    //        push(strconv.Itoa(i))
    //    }
    //}()
    <-bools
}

 

标签:ch,false,err,failOnError,模式,golang,Failed,rabbitmq,conn
来源: https://www.cnblogs.com/chengfengchi/p/16337725.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有