Commit 73cd35b
authored
perf: zero-copy republish path; document receive-path copy rationale (#86)
* perf: use ReadOnlyMemory<byte> on republish path; update receive-path comment
* Apply suggestions from code review
Co-authored-by: Blake Niemyjski <bniemyjski@gmail.com>
* Restore required receive-path copy; drop explanatory comments
Per review feedback, removed the inline PERF/rationale comments on both the
republish and receive paths.
Also restores the .ToArray() copy in ConvertToMessage that was inadvertently
dropped alongside the comment. RabbitMQ rents BasicDeliverEventArgs.Body from an
ArrayPool and reclaims it once the async consumer callback returns. Subscribers
run on separate Task.Run continuations and may capture the message and read
message.Data after their handler returns, so the receive path must own a stable
copy. The republish path stays zero-copy because the publish is fully awaited
within the consumer callback while the pooled buffer is still valid.
* Updated deps
* perf: zero-copy receive in ConvertToMessage
Reference envelope.Body directly instead of copying via ToArray(). Safe because the
body is deserialized synchronously within the awaited subscriber dispatch before the
handler returns, per the handler-scoped IMessage.Data validity contract.1 parent bd7802d commit 73cd35b
5 files changed
Lines changed: 15 additions & 12 deletions
File tree
- src/Foundatio.RabbitMQ
- Messaging
- tests
- Foundatio.RabbitMQ.AppHost
- Foundatio.RabbitMQ.Tests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
385 | 385 | | |
386 | 386 | | |
387 | 387 | | |
388 | | - | |
389 | | - | |
| 388 | + | |
390 | 389 | | |
391 | 390 | | |
392 | 391 | | |
| |||
431 | 430 | | |
432 | 431 | | |
433 | 432 | | |
434 | | - | |
| 433 | + | |
435 | 434 | | |
436 | 435 | | |
437 | 436 | | |
| |||
473 | 472 | | |
474 | 473 | | |
475 | 474 | | |
476 | | - | |
477 | | - | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
478 | 481 | | |
479 | 482 | | |
480 | 483 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
| 10 | + | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
| 15 | + | |
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
Lines changed: 3 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
| 10 | + | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | | - | |
| 14 | + | |
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
| 7 | + | |
8 | 8 | | |
9 | 9 | | |
0 commit comments