sequenceDiagram
participant ra-server
participant wal
participant segment-writer
loop until wal full
ra-server->>+wal: write(Index=1..N, Term=T)
wal->>wal: write-batch([1]
wal->>-ra-server: written event: Term=T, Range=(1, N)
Name of RabbitMQ header | App | Type | Purpose |
---|---|---|---|
x-received-from |
Federation | internal | record hop information for cycle detection |
x-death |
Dead lettering | internal | record dead lettering information (somewhat compacted) |
x-stream-offset |
Streams | outgoing annotation | include the offset for a given message consumed using AMQP |
x-delivery-count |
Quorum | outgoing annotation | include the number of delivery attemps for messages consumed from a quorum queue |
x-stream-filter |
Streams | incoming annotation | include a message filter string used for stream filtering feature |
CC , BCC |
Routing | incoming annotation | used for including additional routes, not evaluated beyond routing, really ought to be x- headers |
x-first-death-reason |
DLX | outgoing annotation | dead lettering info |
x-first-death-queue |
DLX | outgoing annotation | dead lettering queue name |
-
Don't retry publishes to Quorum Queues or Streams if the channel is still live.
Normally we recommend to retry a publish operation if a publisher confirm isn't received within some timeframe. This isn't actually necessary if you know you are only publishing to quorum queues and/or streams and the channel used for publishing is still live. These queue types have their own reliability/resend protocol between the channel and the queue and will ensure publish operations get there once the situation that caused the delay resolves itself (e.g. a temporary unavailability
There are two types of consumer processing failures:
-
Poison messages. Messages that are badly formatted and either cause the consuming application to crash or otherwise fail to process the message.
-
Downstream dependency failures. I.e. when a message is valid but a downstream dependency such as a database isn't available. This category can further be subdived into:
a. All messages on the queue are destined to the same unavailable downstream.
b. The downstream dependencies may be different depending on the message. (e.g. different databases or integration endpoints).
add two fields to append_entries_rpc: | |
read_index :: non_neg_integer() | |
echo :: boolean() | |
and one field to append_entries_reply: | |
read_index :: non_neg_integer() | |
module type GenServerType = | |
type State | |
val init : ErlangTerm list -> State | |
... | |
module MyGenServer : GenServerType = | |
type State = {Name : string} | |
let init args = |
Checking whether the PLT /Users/knilsson/code/rabbitmq/rabbitmq-public-umbrella-master/deps/rabbit_common/.rabbit_common.plt is up-to-date... yes | |
Proceeding with analysis... | |
app_utils.erl:44: The created fun only terminates with explicit exception | |
app_utils.erl:50: The created fun only terminates with explicit exception | |
file_handle_cache.erl:1015: The pattern {MemUse, MemLimit} can never match since previous clauses completely covered the type {non_neg_integer(),'infinity'} | |
file_handle_cache.erl:1016: The pattern {MemUse, MemLimit} can never match since previous clauses completely covered the type {non_neg_integer(),'infinity'} | |
file_handle_cache.erl:1021: Function reduce_read_cache/2 will never be called | |
file_handle_cache.erl:1029: Guard test Freed::any() >= MemToFree::none() can never succeed | |
file_handle_cache_stats.erl:33: Expression produces a value of type atom() | ets:tid(), but this value is unmatched | |
file_handle_cache_stats.erl:44: Expression produces a value of type [integer()] | integer(), but th |
module xmas | |
open Fez.Core | |
let greet who = | |
sprintf "Hi %s" who | |
type Tid = Tid | |
// this is simply to create an atom |
-module(ra_thw). | |
-export([ | |
% new/1, % size, | |
new/2, % size, distance | |
append/3, | |
to_list/1, | |
get/2, % kv lookup | |
truncate/2 % state, first entry to keep | |
]). |
-module(keyval_benchmark). | |
-compile(export_all). | |
%% Runs all benchmarks with Reps number of elements. | |
bench(Reps) -> | |
io:format("Base Case:~n"), | |
io:format("Operation\tTotal (µs)\tAverage (µs)~n"), | |
print(base_case(Reps)), | |
io:format("~nNaive Orddict:~n"), | |
io:format("Operation\tTotal (µs)\tAverage (µs)~n"), |