本文整理汇总了Golang中github.com/garyburd/redigo/redis.PubSubConn.Subscribe方法的典型用法代码示例。如果您正苦于以下问题:Golang PubSubConn.Subscribe方法的具体用法?Golang PubSubConn.Subscribe怎么用?Golang PubSubConn.Subscribe使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/garyburd/redigo/redis.PubSubConn
的用法示例。
在下文中一共展示了PubSubConn.Subscribe方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: listen
func listen() {
c := *dial()
defer c.Close()
var wg sync.WaitGroup
wg.Add(1)
psc := redis.PubSubConn{c}
go func() {
psc.Subscribe("landlord.request")
defer wg.Done()
for {
switch v := psc.Receive().(type) {
case redis.Message:
log.Printf("%s: message %s", v.Channel, v.Data)
if instr := readInstruction(&v); instr != nil {
go handleInstruction(instr)
}
// If we can't read the instruction, we don't know to whom we
// should respond. This is a slight problem, which could be solved
// by using a pattern subscription and embedding the ReplyTo in
// the channel name.
case error:
log.Printf("Receive fail; %v", v)
return
}
}
}()
wg.Wait()
return
}
示例2: SubscribeHandler
// SubscribeHandler : Subsribes to redis to fetch messages
func SubscribeHandler(subChannel chan string) {
// create a subscribe connection to RedisDB
subscribeConn, err := redisurl.ConnectToURL("redis://localhost:6379")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
// Before function exits close the connection
defer subscribeConn.Close()
pubsubConn := redis.PubSubConn{Conn: subscribeConn}
pubsubConn.Subscribe("messages") // Subscribed to messages list in redis DB
for {
switch val := pubsubConn.Receive().(type) {
case redis.Message:
// If the data being received is a text message then push it to the channel
subChannel <- string(val.Data)
case redis.Subscription:
//Handle Subscription here
case error:
return
}
}
}
示例3: Test_Redis
func Test_Redis(t *testing.T) {
pool := newPool("123.56.98.103:6379", "")
conn := pool.Get()
fmt.Println(conn)
// go func() {
cc, err := redis.Dial("tcp", "123.56.98.103:6379")
if err != nil {
panic(err)
}
cc.Do("select", "9")
psc := redis.PubSubConn{Conn: cc}
psc.Subscribe("products")
time.Sleep(1 * time.Second)
for {
switch v := psc.Receive().(type) {
case redis.Subscription:
fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count)
case redis.Message: //单个订阅subscribe
fmt.Printf("%s: message: %s\n", v.Channel, v.Data)
case redis.PMessage: //模式订阅psubscribe
fmt.Printf("PMessage: %s %s %s\n", v.Pattern, v.Channel, v.Data)
case error:
fmt.Println("error", v)
time.Sleep(1 * time.Second)
}
}
// }()
}
示例4: TestPublishJson
func TestPublishJson(t *testing.T) {
time.Sleep(1 * time.Second)
emitter, _ := NewEmitter(&EmitterOpts{
Host: "localhost",
Port: 6379,
})
if emitter == nil {
t.Error("emitter is nil")
}
c, _ := redis.Dial("tcp", "localhost:6379")
defer c.Close()
psc := redis.PubSubConn{Conn: c}
psc.Subscribe("socket.io#emitter")
emitter.Emit("jsondata", []byte(`{"name":"a","age":1,"bin":"abc"}`))
for {
switch v := psc.Receive().(type) {
case redis.Message:
isContain := strings.Contains(string(v.Data), "abc")
if !isContain {
t.Errorf("%s not contains abc", v.Data)
return
} else {
return
}
}
}
}
示例5: Subscribe
func (chat *Chat) Subscribe() {
psc := redis.PubSubConn{pool.Get()}
psc.Subscribe("chat")
c := pool.Get()
for {
switch v := psc.Receive().(type) {
case redis.Message:
log.Printf("%s: message %s\n", v.Channel, v.Data)
id, err := redis.Int(v.Data, nil)
if err != nil {
log.Println(err)
return
}
result, err := redis.Values(c.Do("HGETALL", "message:"+strconv.Itoa(id)))
if err != nil {
log.Println(err)
return
}
var message Message
err = redis.ScanStruct(result, &message)
if err != nil {
log.Println(err)
return
}
chat.outgoing <- &message
case redis.Subscription:
log.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count)
case error:
log.Println(v)
return
}
}
}
示例6: RunOnce
func (group_manager *GroupManager) RunOnce() bool {
c, err := redis.Dial("tcp", config.redis_address)
if err != nil {
log.Info("dial redis error:", err)
return false
}
psc := redis.PubSubConn{c}
psc.Subscribe("group_create", "group_disband", "group_member_add", "group_member_remove")
group_manager.Reload()
for {
switch v := psc.Receive().(type) {
case redis.Message:
if v.Channel == "group_create" {
group_manager.HandleCreate(string(v.Data))
} else if v.Channel == "group_disband" {
group_manager.HandleDisband(string(v.Data))
} else if v.Channel == "group_member_add" {
group_manager.HandleMemberAdd(string(v.Data))
} else if v.Channel == "group_member_remove" {
group_manager.HandleMemberRemove(string(v.Data))
} else {
log.Infof("%s: message: %s\n", v.Channel, v.Data)
}
case redis.Subscription:
log.Infof("%s: %s %d\n", v.Channel, v.Kind, v.Count)
case error:
log.Info("error:", v)
return true
}
}
}
示例7: TestPublishBinary
func TestPublishBinary(t *testing.T) {
time.Sleep(1 * time.Second)
emitter, _ := NewEmitter(&EmitterOpts{
Host: "localhost",
Port: 6379,
})
if emitter == nil {
t.Error("emitter is nil")
}
c, _ := redis.Dial("tcp", "localhost:6379")
defer c.Close()
psc := redis.PubSubConn{Conn: c}
psc.Subscribe("socket.io#emitter")
val := bytes.NewBufferString("aaabbbccc")
emitter.EmitBinary("bin", val.Bytes())
for {
switch v := psc.Receive().(type) {
case redis.Message:
isContain := strings.Contains(string(v.Data), "aaabbbccc")
if !isContain {
t.Errorf("%s not contains aaabbbccc", v.Data)
return
} else {
return
}
}
}
}
示例8: subscribeRedis
func (self *Pump) subscribeRedis(channel string, msger *messenger.Messenger) {
c, err := redis.Dial("tcp", os.Getenv("REDIS_ADDR"))
if err != nil {
panic(err)
}
defer c.Close()
psc := redis.PubSubConn{c}
psc.Subscribe(channel)
for {
switch v := psc.Receive().(type) {
case redis.Message:
fmt.Printf("PMessage: channel:%s data:%s\n", v.Channel, v.Data)
msger.SendMessage(string(v.Data))
case redis.Subscription:
log.Printf("Subscription: kind:%s channel:%s count:%d\n", v.Kind, v.Channel, v.Count)
if v.Count == 0 {
return
}
case error:
log.Printf("error: %v\n", v)
return
}
}
}
示例9: SubscribeToSentinel
func SubscribeToSentinel() {
sentinel := GetSentinel()
c, err := redis.Dial("tcp", sentinel)
if err != nil {
Fatal("Cannot connect to redis sentinel:", sentinel)
}
err = ValidateCurrentMaster()
if err != nil {
Fatal("Cannot switch to current master")
}
psc := redis.PubSubConn{c}
Debug("Subscribing to sentinel (+switch-master).")
psc.Subscribe("+switch-master")
for {
switch v := psc.Receive().(type) {
case redis.Message:
Debug(fmt.Sprintf("%s: message: %s", v.Channel, v.Data))
data := strings.Split(string(v.Data), string(' '))
SwitchMaster(data[0], data[3], data[4])
case redis.Subscription:
Debug(fmt.Sprintf("%s: %s %d", v.Channel, v.Kind, v.Count))
case error:
Fatal("Error with redis connection:", psc)
}
}
}
示例10: slaveHandler
func slaveHandler(s *websocket.Conn, sessionID int, dbStore *Store, redisAddr string) {
xlog.Debugf("entering SlaveHandler")
c, err := redis.Dial("tcp", redisAddr)
if err != nil {
xlog.Errorf("redis.Dial failed: %v", err)
return
}
defer c.Close()
psc := redis.PubSubConn{Conn: c}
topic := fmt.Sprintf("session.%d", sessionID)
psc.Subscribe(topic)
defer psc.Unsubscribe(topic)
for {
switch v := psc.Receive().(type) {
case redis.Message:
StatCount("command for slave", 1)
var cmd Command
if err := json.Unmarshal(v.Data, &cmd); err != nil {
break
}
if err := websocket.JSON.Send(s, cmd); err != nil {
xlog.Errorf("slaveHandler: JSON.Send failed: %v", err)
return
}
if cmd.Cmd == "close" {
return
}
case redis.Subscription:
xlog.Debugf("mkay... redis.Subscription received: %#v", v)
}
}
}
示例11: Subscribe
func (this *RedisStore) Subscribe(c chan []byte, channel string) (redis.Conn, error) {
conn, err := this.GetConn()
if err != nil {
return nil, err
}
psc := redis.PubSubConn{Conn: conn}
psc.Subscribe(channel)
go func() {
defer conn.Close()
for {
switch v := psc.Receive().(type) {
case redis.Message:
c <- v.Data
case redis.Subscription:
case error:
log.Printf("Error receiving: %s. Reconnecting...", v.Error())
conn, err = this.GetConn()
if err != nil {
log.Println(err)
}
psc = redis.PubSubConn{Conn: conn}
psc.Subscribe(channel)
}
}
}()
return conn, nil
}
示例12: GetTaskResult
// GetTaskResult fetchs task result for the specified taskID
func (b *Broker) GetTaskResult(taskID string) <-chan *broker.Message {
msg := make(chan *broker.Message)
// fetch messages
log.Debug("Waiting for Task Result Messages: ", taskID)
conn := b.pool.Get()
psc := redis.PubSubConn{Conn: conn}
psc.Subscribe(taskID)
go func() {
for {
switch v := psc.Receive().(type) {
case redis.Message:
log.Info("message: ", string(v.Data))
m := &broker.Message{}
err := json.Unmarshal(v.Data, &m)
if err != nil {
log.Error("Failed to unmarshal message.")
} else {
log.Debug("Task Result message: ", string(m.Body))
msg <- m
}
psc.Unsubscribe()
conn.Close()
close(msg)
break
}
}
}()
log.Debug("Subscribed to Task Result")
return msg
}
示例13: TestPublishEnd
func TestPublishEnd(t *testing.T) {
time.Sleep(1 * time.Second)
emitter, _ := NewEmitter(&EmitterOpts{
Host: "localhost",
Port: 6379,
})
defer emitter.Close()
c, _ := redis.Dial("tcp", "localhost:6379")
defer c.Close()
psc := redis.PubSubConn{Conn: c}
psc.Subscribe("socket.io#emitter")
emitter.Emit("finish")
for {
switch v := psc.Receive().(type) {
case redis.Message:
isContain := strings.Contains(string(v.Data), "finish")
if !isContain {
t.Errorf("%s not contains end", v.Data)
return
} else {
return
}
}
}
}
示例14: ReceiveMessages
// ReceiveMessages : Receive messages fron master_messages redis channel
func ReceiveMessages(newSlaveChannel chan string, ipAddress string) {
conn, err := redisurl.ConnectToURL(redisURL)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
// Close only when function exits
defer conn.Close()
// Creating a pubsubConn for master messages
pubsubConn := redis.PubSubConn{Conn: conn}
pubsubConn.Subscribe(masterMessageQueue)
for {
switch val := pubsubConn.Receive().(type) {
case redis.Message:
// If the data being received is a text message then push it to the channel
newSlaveChannel <- string(val.Data)
case redis.Subscription:
//Handle Subscription here
case error:
return
}
}
}
示例15: ProcessNewBlock
func ProcessNewBlock(conf *Config, rpool *redis.Pool, spool *redis.Pool) {
log.Println("ProcessNewBlock startup")
conn := rpool.Get()
defer conn.Close()
psc := redis.PubSubConn{Conn: conn}
psc.Subscribe("btcplex:blocknotify")
for {
switch v := psc.Receive().(type) {
case redis.Message:
hash := string(v.Data)
log.Printf("Processing new block: %v\n", hash)
c := rpool.Get()
newblock, err := SaveBlockFromRPC(conf, spool, hash)
if err != nil {
log.Printf("Error processing new block: %v\n", err)
} else {
// Once the block is processed, we can publish it as btcplex own blocknotify
c.Do("PUBLISH", "btcplex:blocknotify2", hash)
newblockjson, _ := json.Marshal(newblock)
c.Do("PUBLISH", "btcplex:newblock", string(newblockjson))
}
c.Close()
}
}
}