diff --git a/pubsub/subscriber.go b/pubsub/subscriber.go index e01b87f..b316a17 100644 --- a/pubsub/subscriber.go +++ b/pubsub/subscriber.go @@ -173,7 +173,7 @@ func (s *Subscriber) consume(ctx context.Context, consumer *Consumer) { return } - err := s.readMessage(consumer.msgs) + err := s.readMessage(ctx, consumer.msgs) if err != nil { consumer.Err = err return @@ -181,8 +181,7 @@ func (s *Subscriber) consume(ctx context.Context, consumer *Consumer) { } } -func (s *Subscriber) readMessage(msgChan chan *Message) error { - // var msg *Message +func (s *Subscriber) readMessage(ctx context.Context, msgChan chan *Message) error { op := func(conn net.Conn) error { err := s.conn.SetReadDeadline(time.Now().Add(time.Second)) if err != nil { @@ -225,7 +224,13 @@ func (s *Subscriber) readMessage(msgChan chan *Message) error { msgChan <- msg - ack := <-msg.ack + var ack bool + select { + case <-ctx.Done(): + return ctx.Err() + case ack = <-msg.ack: + } + //ack := <-msg.ack ackMessage := server.Nack if ack { diff --git a/pubsub/subscriber_test.go b/pubsub/subscriber_test.go index 0463aff..e4834a8 100644 --- a/pubsub/subscriber_test.go +++ b/pubsub/subscriber_test.go @@ -134,6 +134,7 @@ func TestUnsubscribesFromTopic(t *testing.T) { err = publisher.PublishMessage(msg) require.NoError(t, err) + time.Sleep(time.Second) cancel() select { @@ -180,7 +181,7 @@ func TestPublishAndSubscribe(t *testing.T) { } // give the consumer some time to read the messages -- TODO: make better! - time.Sleep(time.Millisecond * 500) + time.Sleep(time.Second) cancel() select { @@ -231,7 +232,7 @@ func TestPublishAndSubscribeNackMessage(t *testing.T) { require.NoError(t, err) // give the consumer some time to read the messages -- TODO: make better! - time.Sleep(time.Millisecond * 500) + time.Sleep(time.Second) cancel() select {