基于windows的消息服務(wù)隊列RabbitMQ(GO實現(xiàn)方式)

1.基礎(chǔ)環(huán)境依賴

下載并安裝Eralng OTP For Windows(erlang的環(huán)境)

下載并安裝Rabbit MQ Server Windows

下載MQ Go的依賴

2.配置RabbitMQ

定位到rabbitmq的安裝路徑(圖1-1):

image

接著輸入rabbitmqctl status,出現(xiàn)類似如下說明安裝成功(圖2-2)

image

安裝 RabbitMQWeb的管理插件,接著上面繼續(xù)輸入以下命令(rabbitmq-plugins enable rabbitmq_management)

之后可以通過http://127.0.0.1:15672/,為了安全起見,我們需要重新設(shè)置賬戶密碼,首先輸入rabbitmqctl.bat list_users來查詢用戶列表(圖2-3),默認為guest:guest,新增用戶輸入rabbitmqctl.bat add_user username password,授予管理員權(quán)限輸入rabbitmqctl.bat set_user_tags username administrator,rabbitmqctl.bat set_permissions -p / username "." "." ".*"),之后可用新的username和password登錄賬戶了。

image

send.go


packagemain

import(

      "log"

      "github.com/streadway/amqp"

)

funcfailOnError(errerror,msgstring) {

        iferr !=nil{

            log.Fatalf("%s:%s", msg, err)

        }

}

func main() {

        conn,err:=amqp.Dial("amqp://guest:guest@localhost:5672/")

        failOnError(err,"Failed to connect to RabbitMQ")

        deferconn.Close()

        ch,err:=conn.Channel()

        failOnError(err,"Failed to open a channel")

        deferch.Close()

        q,err:=ch.QueueDeclare(

            "hello",//name

            false,//durable

            false,//delete when unused

            false,//exclusive

            false,//no-wait

            nil,//arguments

        )

        failOnError(err,"Failed to declare a queue")

        body:="hello"

        err = ch.Publish(

            "",//exchange

            q.Name,//routing key

            false,//mandatory

            false,//immediate

        amqp.Publishing{

          ContentType:"text/plain",

              Body:        []byte(body),

          })

        log.Printf("[x] Sent%s", body)

        failOnError(err,"Failed to publish a message")

}

receive.go


package main

import(

        "log"

        "github.com/streadway/amqp"

)

func failOnError(errerror,msgstring) {

        iferr !=nil{

            log.Fatalf("%s:%s", msg, err)

        }

}

func main() {

        conn,err:=amqp.Dial("amqp://guest:guest@localhost:5672/")

        failOnError(err,"Failed to connect to RabbitMQ")

        deferconn.Close()

        ch,err:=conn.Channel()

        failOnError(err,"Failed to open a channel")

        deferch.Close()

        q,err:=ch.QueueDeclare(

            "hello",//name

            false,//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

            true,//auto-ack

            false,//exclusive

            false,//no-local

            false,//no-wait

            nil,//args

        )

        failOnError(err,"Failed to register a consumer")

        forever:=make(chanbool)

        gofunc() {

            ford:=rangemsgs {

            log.Printf("Received a message:%s", d.Body)

        }

}()

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

          <-forever

}

測試結(jié)果

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容