https://karab.in
- poprawiona strona wyszukiwania
- poprawiona strona tagu
![Ernest - #kbin szybki update (tag do czarnolistowania)
https://karab.in
- poprawion...](https://wykop.pl/cdn/c3201142/4d8c4e17fb80cae05b157af16ecc3e2b11bea67e4dfa7dc38916524ae4025843,w400.png?author=Ernest_&auth=e4a38cd9e355dce17bf1f22c471ae5c2)
źródło: Zrzut ekranu 2023-04-27 o 15.02.04
PobierzWszystko
Wszystkie
Archiwum
źródło: Zrzut ekranu 2023-04-27 o 15.02.04
Pobierzframework:
version: '3.8'
3
Do tej pory wszystkie operacje wykonywaliśmy na jednej instancji RabbitMQ. Ma to kilka wady. Pierwsza i najważniejsza, to brak bezpieczeństwa. Co się stanie, gdy serwer RabbitMQ ulegnie awarii ?? Czy jesteś w stanie odzyskać dane z serwera, jak szybko jesteś w stanie uruchomić kolejną...
z1
Kontynuujemy przygodę z RabbitMQ w nowym wpisie dowiesz się jak opóźnić powrót wiadomości do kolejki. Mechanizm bardzo przydatny, gdy przetwarzane wiadomości wymagają komunikacji z zewnętrznymi serwisami, które nie zawsze muszą być dostępne.
zA worker instance can consume from any number of queues. By default it will consume from all queues defined in the task_queues setting (that if not specified falls back to the default queue named celery).
6
W pierwszym wpisie z tej serii zrobiłem pełen przekrój przez system kolejkowania RabbitMQ. Teraz zajmę się dokładniejszym omówieniem poszczególnych elementów systemu kolejkowania, a na pierwszy ogień idą centrale wiadomości (ang. exchange). Otóż niezależnie od języka programowania w jakim...
z2
Prędzej czy później większość programistów spotyka się z potrzebą kolejkowania zadań. Czy to w przypadku rozsyłania newsletter-ów do klientów, czy też generowania czasochłonnych raportów, plików PDF oraz innych operacji wymagających dłuższego czasu oczekiwania użytkownika. Pewnym...
zFROM php:7-apache
. Próbuję do #php dodać wsparcie rabbita. Teoretycznie można to zrobić tak RUN apt-get update && apt-get install -y librabbitmq-dev && echo "" | pecl install amqp
, ale nic z tego. W php mam Fatal error: Uncaught Error: Class 'PhpAmqpLib\Connection\AMQPStreamConnection' not found
. Dodawał może ktoś ten moduł?Wykop.pl
poproszę o gotowe rozwiązanie albo link do materiału z którego mógłbym skorzystać. Mam następujący problem:
Jest aplikacja napisana w #php #symfony która to publikuje eventy w kolejce #rabbitmq. Są też 2 consumery, które to konsumują te eventy. Problem jest taki, że w pewnym miejscu mam race condition. Są opublikowane rożne eventy, które podczas konsumpcji tworzą lub aktualizują rekord w bazie danych. Problem jest w tym, że konsumpcja może nastąpić w bardzo krótkim czasie przez co 2 consumery będą próbowały stworzyć rekord w bazie danych. Dodałem kod, który sprawdza czy rekord istnieje w bazie danych czy nie, a następnie rzucam wyjątek, żeby wykonała się aktualizacja rekordu, ale czasami różnice są takie minimalne, że tego nie wystarcza.
Poproszę o odpowiedź inną niż - zostaw sobie jednego consumera i problem rozwiązany - to nie zadziała, bo czasami ktoś chce wygenerować ogromny raport, np. za pół roku czy za rok i consumer będzie zablokowany przez cały czas generowania raportu, więc reszta systemu nie będzie działać poprawnie, a z dwoma consumerami można sobie pozwolić na blokadę jednego przez dłuższy czas, ponieważ drugi będzie dalej obsługiwał eventy z kolejki.
Na race condition aktualizacji może pomóc transakcja +
SELECT FOR UPDATE
, żeby zrobić locka na wierszu dopóki nie skończysz swojej operacji update'u.Co do race condition przy tworzeniu wierszy, to już musiałbyś dokładnie napisać co
Zamiast tego zrób albo tak jak pisałem - transakcja, select for update, update/insert, koniec transakcji. Albo jeśli jesteś w stanie to zrobić w sposób idempotentny to po prostu
INSERT ... ON DUPLICATE KEY UPDATE
alboREPLACE
.Ewentualnie zapytaj po prostu jakiegoś seniora