go鎬庝箞瀹炵幇娑堟伅闃熷垪
鍦℅o璇█涓紝浣犲彲浠ヤ娇鐢ㄧ涓夋柟搴撴潵瀹炵幇娑堟伅闃熷垪銆傜洰鍓嶆瘮杈冨父鐢ㄧ殑娑堟伅闃熷垪搴撴湁锛?/p>
-
RabbitMQ锛歊abbitMQ鏄竴涓紑婧愮殑娑堟伅闃熷垪绯荤粺锛屼娇鐢ˋMQP鍗忚鏉ュ疄鐜版秷鎭殑浼犻€掋€備綘鍙互浣跨敤Go璇█鐨勭涓夋柟搴?code>github.com/streadway/amqp鏉ヤ笌RabbitMQ杩涜浜や簰銆?/p>
-
Apache Kafka锛欿afka鏄竴涓垎甯冨紡鐨勩€侀珮鍚炲悙閲忕殑娑堟伅闃熷垪绯荤粺锛屼娇鐢ㄥ彂甯?璁㈤槄妯″紡鏉ュ鐞嗘秷鎭€備綘鍙互浣跨敤Go璇█鐨勭涓夋柟搴?code>github.com/Shopify/sarama鏉ヤ笌Kafka杩涜浜や簰銆?/p>
-
NSQ锛歂SQ鏄竴涓疄鏃跺垎甯冨紡娑堟伅骞冲彴锛屽叿鏈夐珮鍙敤鎬у拰鍙几缂╂€с€備綘鍙互浣跨敤Go璇█鐨勭涓夋柟搴?code>github.com/nsqio/go-nsq鏉ヤ笌NSQ杩涜浜や簰銆?/p>
涓嬮潰鏄竴涓娇鐢≧abbitMQ鐨勭畝鍗曠ず渚嬶細
package main
import (
"log"
"github.com/streadway/amqp"
)
func failOnError(err error, msg string) {
if err != 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")
defer conn.Close()
ch, err := conn.Channel()
failOnError(err, "Failed to open a channel")
defer ch.Close()
q, err := ch.QueueDeclare(
"hello", // 闃熷垪鍚嶇О
false, // 鏄惁鎸佷箙鍖?/span>
false, // 鏄惁鑷姩鍒犻櫎
false, // 鏄惁鐙崰闃熷垪
false, // 鏄惁绛夊緟娑堣垂鑰呰嚜鍔ㄥ垹闄?/span>
nil, // 鍏朵粬鍙傛暟
)
failOnError(err, "Failed to declare a queue")
msgs, err := ch.Consume(
q.Name, // 闃熷垪鍚嶇О
"", // 娑堣垂鑰呮爣璇嗙
true, // 鑷姩搴旂瓟
false, // 鏄惁鎺掍粬闃熷垪
false, // 鏄惁闈為樆濉?/span>
false, // 鍏朵粬鍙傛暟
)
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)
}
}()
log.Printf(" [*] Waiting for messages. To exit press CTRL+C")
<-forever
}
杩欎釜渚嬪瓙鍒涘缓浜嗕竴涓繛鎺ュ埌RabbitMQ鏈嶅姟鍣ㄧ殑閫氶亾锛屽0鏄庝簡涓€涓悕涓?quot;hello"鐨勯槦鍒楋紝骞跺湪鏃犻檺寰幆涓瓑寰呮帴鏀舵潵鑷闃熷垪鐨勬秷鎭€傚綋鎺ユ敹鍒版秷鎭椂锛屼細鎵撳嵃鍑烘秷鎭唴瀹广€備綘鍙互淇敼杩欎釜渚嬪瓙浠ユ弧瓒充綘鐨勫疄闄呴渶姹傘€?/p>
閫氳繃杩欎簺绗笁鏂瑰簱锛屼綘鍙互浣跨敤Go璇█瀹炵幇鍙潬銆侀珮鍚炲悙閲忕殑娑堟伅闃熷垪绯荤粺銆備綘鍙互鏍规嵁鑷繁鐨勫疄闄呴渶姹傞€夋嫨鍚堥€傜殑娑堟伅闃熷垪搴撴潵瀹炵幇銆?/p>