[WIP]: broker ErrorHandler option (#1296)
* broker ErrorHandler option Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org> * rewrite Event interface, add error Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org> * implement new interface Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org> * change ErrorHandler func to broker.Handler Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org> * fix Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
		@@ -53,8 +53,9 @@ type subscriber struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type publication struct {
 | 
			
		||||
	t string
 | 
			
		||||
	m *Message
 | 
			
		||||
	t   string
 | 
			
		||||
	err error
 | 
			
		||||
	m   *Message
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p *publication) Topic() string {
 | 
			
		||||
@@ -70,6 +71,10 @@ func (p *publication) Ack() error {
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p *publication) Error() error {
 | 
			
		||||
	return p.err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *subscriber) Options() SubscribeOptions {
 | 
			
		||||
	return s.opts
 | 
			
		||||
}
 | 
			
		||||
@@ -390,10 +395,26 @@ func (n *natsBroker) Subscribe(topic string, handler Handler, opts ...SubscribeO
 | 
			
		||||
 | 
			
		||||
	fn := func(msg *nats.Msg) {
 | 
			
		||||
		var m Message
 | 
			
		||||
		if err := n.opts.Codec.Unmarshal(msg.Data, &m); err != nil {
 | 
			
		||||
		pub := &publication{t: msg.Subject}
 | 
			
		||||
		eh := n.opts.ErrorHandler
 | 
			
		||||
		err := n.opts.Codec.Unmarshal(msg.Data, &m)
 | 
			
		||||
		pub.err = err
 | 
			
		||||
		pub.m = &m
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			m.Body = msg.Data
 | 
			
		||||
			log.Error(err)
 | 
			
		||||
			if eh != nil {
 | 
			
		||||
				eh(pub)
 | 
			
		||||
			}
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		handler(&publication{m: &m, t: msg.Subject})
 | 
			
		||||
		if err := handler(pub); err != nil {
 | 
			
		||||
			pub.err = err
 | 
			
		||||
			log.Error(err)
 | 
			
		||||
			if eh != nil {
 | 
			
		||||
				eh(pub)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var sub *nats.Subscription
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user