You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
package client
import ( "context" "io" "time"
"github.com/chrislusf/seaweedfs/weed/pb/messaging_pb" )
type Subscriber struct { subscriberClient messaging_pb.SeaweedMessaging_SubscribeClient }
func (mc *MessagingClient) NewSubscriber(subscriberId, namespace, topic string) (*Subscriber, error) { stream, err := messaging_pb.NewSeaweedMessagingClient(mc.grpcConnection).Subscribe(context.Background()) if err != nil { return nil, err }
// send init message
err = stream.Send(&messaging_pb.SubscriberMessage{ Init: &messaging_pb.SubscriberMessage_InitMessage{ Namespace: namespace, Topic: topic, Partition: 0, StartPosition: messaging_pb.SubscriberMessage_InitMessage_TIMESTAMP, TimestampNs: time.Now().UnixNano(), SubscriberId: subscriberId, }, }) if err != nil { return nil, err }
// process init response
initResponse, err := stream.Recv() if err != nil { return nil, err } if initResponse.Redirect != nil { // TODO follow redirection
}
return &Subscriber{ subscriberClient: stream, }, nil }
func (s *Subscriber) Subscribe(processFn func(m *messaging_pb.Message)) error { for { resp, listenErr := s.subscriberClient.Recv() if listenErr == io.EOF { return nil } if listenErr != nil { return listenErr } processFn(resp.Data) } }
|