Uważam, że domyślna kolejność usuwania z kolejki to pierwsze na pierwszym wyjściu, dlatego zostaną one usunięte z kolejki w tej samej kolejności, w jakiej zostały umieszczone.
Po drugie, czy mówisz, że chcesz serializować dekolejkowanie na nieunikalnym identyfikatorze? Oznacza to, że w zasadzie masz wiele kolejek w swojej kolejce i chcesz, aby tylko jedno zadanie zużywało wiadomości z każdej kolejki w danym momencie?
Czyli masz wiadomości:
1 | a
2 | a
3 | b
4 | a
Tutaj masz dwa typy rekordów (aib) i chcesz, aby jedna praca skonsumowała wszystkie a, a druga, aby skonsumować wszystkie b. Jeśli tak jest, rozważ utworzenie wielu kolejek?
W przypadku niepowodzenia wielu kolejek, spójrz na typ dequeue_options_t, który przekazujesz do procedury dequeue - przede wszystkim dequeue_condition - pozwala to wybrać tylko określone komunikaty, dzięki czemu możesz rozpocząć zadanie dla wszystkich a i inne dla wszystkich b itd.