(s *service, name, subject string, handler Handler, metadata map[string]string, queueGroup string, noQueue bool, msgLimit, bytesLimit int)
| 416 | } |
| 417 | |
| 418 | func addEndpoint(s *service, name, subject string, handler Handler, metadata map[string]string, queueGroup string, noQueue bool, msgLimit, bytesLimit int) error { |
| 419 | if !nameRegexp.MatchString(name) { |
| 420 | return fmt.Errorf("%w: invalid endpoint name", ErrConfigValidation) |
| 421 | } |
| 422 | if !subjectRegexp.MatchString(subject) { |
| 423 | return fmt.Errorf("%w: invalid endpoint subject", ErrConfigValidation) |
| 424 | } |
| 425 | if !subjectRegexp.MatchString(queueGroup) { |
| 426 | return fmt.Errorf("%w: invalid endpoint queue group", ErrConfigValidation) |
| 427 | } |
| 428 | endpoint := &Endpoint{ |
| 429 | service: s, |
| 430 | EndpointConfig: EndpointConfig{ |
| 431 | Subject: subject, |
| 432 | Handler: handler, |
| 433 | Metadata: metadata, |
| 434 | QueueGroup: queueGroup, |
| 435 | QueueGroupDisabled: noQueue, |
| 436 | }, |
| 437 | Name: name, |
| 438 | } |
| 439 | |
| 440 | var sub *nats.Subscription |
| 441 | var err error |
| 442 | var options = endpointOpts{ |
| 443 | msgLimit: msgLimit, |
| 444 | bytesLimit: bytesLimit, |
| 445 | } |
| 446 | |
| 447 | if !noQueue { |
| 448 | sub, err = s.nc.QueueSubscribe( |
| 449 | subject, |
| 450 | queueGroup, |
| 451 | func(m *nats.Msg) { |
| 452 | s.reqHandler(endpoint, &request{msg: m}) |
| 453 | }, |
| 454 | ) |
| 455 | } else { |
| 456 | sub, err = s.nc.Subscribe( |
| 457 | subject, |
| 458 | func(m *nats.Msg) { |
| 459 | s.reqHandler(endpoint, &request{msg: m}) |
| 460 | }, |
| 461 | ) |
| 462 | } |
| 463 | if err != nil { |
| 464 | return err |
| 465 | } |
| 466 | |
| 467 | // Apply pending limits if configured |
| 468 | if options.msgLimit != 0 || options.bytesLimit != 0 { |
| 469 | if err := sub.SetPendingLimits(options.msgLimit, options.bytesLimit); err != nil { |
| 470 | return err |
| 471 | } |
| 472 | } |
| 473 | |
| 474 | s.m.Lock() |
| 475 | endpoint.subscription = sub |
no test coverage detected