broker | Zeek 's Messaging Library
kandi X-RAY | broker Summary
kandi X-RAY | broker Summary
Broker: Zeek’s Messaging Library.
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of broker
broker Key Features
broker Examples and Code Snippets
Community Discussions
Trending Discussions on broker
QUESTION
e: this has been fixed through Spring Boot 2.6.5 (see https://github.com/spring-projects/spring-boot/issues/30243)
Since upgrading to Spring Boot 2.6.X (in my case: 2.6.1), I have multiple projects that now have failing unit-tests on Windows that cannot start EmbeddedKafka
, that do run with Linux
There is multiple errors, but this is the first one thrown
...ANSWER
Answered 2021-Dec-09 at 15:51Known bug on the Apache Kafka side. Nothing to do from Spring perspective. See more info here: https://github.com/spring-projects/spring-kafka/discussions/2027. And here: https://issues.apache.org/jira/browse/KAFKA-13391
You need to wait until Apache Kafka 3.0.1
or don't use embedded Kafka and just rely on the Testcontainers, for example, or fully external Apache Kafka broker.
QUESTION
I just switched from ForkPool to gevent with concurrency (5) as the pool method for Celery workers running in Kubernetes pods. After the switch I've been getting a non recoverable erro in the worker:
amqp.exceptions.PreconditionFailed: (0, 0): (406) PRECONDITION_FAILED - delivery acknowledgement on channel 1 timed out. Timeout value used: 1800000 ms. This timeout value can be configured, see consumers doc guide to learn more
The broker logs gives basically the same message:
2021-11-01 22:26:17.251 [warning] <0.18574.1> Consumer None4 on channel 1 has timed out waiting for delivery acknowledgement. Timeout used: 1800000 ms. This timeout value can be configured, see consumers doc guide to learn more
I have the CELERY_ACK_LATE
set up, but was not familiar with the necessity to set a timeout for the acknowledgement period. And that never happened before using processes. Tasks can be fairly long (60-120 seconds sometimes), but I can't find a specific setting to allow that.
I've read in another post in other forum a user who set the timeout on the broker configuration to a huge number (like 24 hours), and was also having the same problem, so that makes me think there may be something else related to the issue.
Any ideas or suggestions on how to make worker more resilient?
...ANSWER
Answered 2022-Mar-05 at 01:40For future reference, it seems that the new RabbitMQ versions (+3.8) introduced a tight default for consumer_timeout
(15min I think).
The solution I found (that has also been added to Celery docs not long ago here) was to just add a large number for the consumer_timeout
in RabbitMQ.
In this question, someone mentions setting consumer_timeout to false, in a way that using a large number is not needed, but apparently there's some specifics regarding the format of the configuration for that to work.
I'm running RabbitMQ in k8s and just done something like:
QUESTION
Celery disconnects from RabbitMQ each time a task is passed to rabbitMQ, however the task does eventually succeed:
My questions are:
- How can I solve this issue?
- What improvements can you suggest for my celery/rabbitmq configuration?
Celery version: 5.1.2 RabbitMQ version: 3.9.0 Erlang version: 24.0.4
RabbitMQ error (sorry for the length of the log:
...ANSWER
Answered 2021-Aug-02 at 07:25Same problem here. Tried different settings but with no solution.
Workaround: Downgrade RabbitMQ to 3.8. After downgrading there were no connection errors anymore. So, I think it must have something to do with different behavior of v3.9.
QUESTION
I'm trying to figure something out here
I have a 'sequence' to be executed via a serial port (on an RPI).
I have an supervisored PHP command in Laravel running that connects to a MQTT broker.
When I send a message to that broker, the RPI picks it up and processes it. Now, I have a moment in which I wait for user interaction. The issue here is, sometimes the user does not interact with the system and the PI keeps "waiting" for serial data. When a user presses a button, I get serial data, which I can process.
I tried to use a while (true) {}
loop that reads the serial data, but it just stops suddenly. Here is some example code;
ANSWER
Answered 2021-Dec-05 at 12:15If you look at the source of lepiaf\SerialPort you'll find it sets the stream in non blocking mode, however the read method does an infinite loop until it finds the separator. This means it will never return unless the separator is received, and depending on your configuration your script will be killed once the php max execution time is reached. Since the library is very simple the better option is to edit the read method adding a timeout parameter. Edit the file "lepiaf/SerialPort/SerialPort.php", scroll down to the read method (line 107) and change it as follows:
QUESTION
I'm working on a migration from ActiveMQ "Classic" 5.15.4 to ActiveMQ Artemis 2.17.0, and I observed a performance degradation. I tested with 1 producer on a topic and different number of consumers consuming that topic. I'm measuring the time between the creation of the message and its reception by the consumer.
The tests are done on a cluster of 3 nodes all connected to each others. Each broker is embedded in a JBoss. I used a cluster of 3 nodes because that's our current production setup. I'm challenging this setup because we have few consumers and producers (less than 50 each time) and we are using message grouping but I need to do POC on a setup with only 2 nodes in active/standby mode.
The producer is targeting always the same node and the consumers are connected to the other 2 nodes randomly.
We can see that for all cases, Artemis is slightly slower than ActiveMQ Classic. I'm wondering if this is something expected.
...ANSWER
Answered 2021-Oct-06 at 14:17Generally speaking, ActiveMQ Artemis is notably faster than ActiveMQ "Classic" due to the significant architectural differences between them. In short, ActiveMQ Artemis was designed to be completely non-blocking and performs very well at scale compared to ActiveMQ "Classic".
However, in this case you are not testing the brokers at scale. You are testing one producer and a "different number" of consumers. This is certainly not the kind of production use-case that would warrant a cluster of 3 brokers. A single broker on modest or even minimal hardware would almost certainly suffice.
Even if you push the client count to around 50 I still think one live node would suffice. You definitely want to use just one live node if you're using message grouping. See the documentation for important details about clustered message grouping.
It's also important to keep in mind that you must compare "apples to apples" in terms of each broker's configuration. This is not necessarily trivial, especially when dealing with clusters. You did not share your broker configurations so I can't comment on whether or not they are functionally equivalent or at least as close to functionally equivalent as possible. There are many different configuration-specific reasons why one broker might perform better than the other in certain use-cases.
Over the last several years SoftwareMill has published benchmarks for popular message brokers for the persistent, replicated queue use-case. The last time both ActiveMQ "Classic" and Artemis were tested was in 2017. Here are the results. Since then SoftwareMill no longer tests ActiveMQ "Classic".
QUESTION
I have read a number of articles and questions here on StackOverflow about wrapping a callback based API with a Task
based one using a TaskCompletionSource
, and I'm trying to use that sort of technique when communicating with a Solace PubSub+ message broker.
My initial observation was that this technique seems to shift responsibility for concurrency. For example, the Solace broker library has a Send()
method which can possibly block, and then we get a callback after the network communication is complete to indicate "real" success or failure. So this Send()
method can be called very quickly, and the vendor library limits concurrency internally.
When you put a Task around that it seems you either serialize the operations ( foreach message await SendWrapperAsync(message)
), or take over responsibility for concurrency yourself by deciding how many tasks to start (eg, using TPL dataflow).
In any case, I decided to wrap the Send
call with a guarantor that will retry forever until the callback indicates success, as well as take responsibility for concurrency. This is a "guaranteed" messaging system. Failure is not an option. This requires that the guarantor can apply backpressure, but that's not really in the scope of this question. I have a couple of comments about it in my example code below.
What it does mean is that my hot path, which wraps the send + callback, is "extra hot" because of the retry logic. And so there's a lot of TaskCompletionSource
creation here.
The vendor's own documentation makes recommendations about reusing their Message
objects where possible rather then recreating them for every Send
. I have decided to use a Channel
as a ring buffer for this. But that made me wonder - is there some alternative to the TaskCompletionSource
approach - maybe some other object that can also be cached in the ring buffer and reused, achieving the same outcome?
I realise this is probably an overzealous attempt at micro-optimisation, and to be honest I am exploring several aspects of C# which are above my pay grade (I'm a SQL guy, really), so I could be missing something obvious. If the answer is "you don't actually need this optimisation", that's not going to put my mind at ease. If the answer is "that's really the only sensible way", my curiosity would be satisfied.
Here is a fully functioning console application which simulates the behaviour of the Solace library in the MockBroker
object, and my attempt to wrap it. My hot path is the SendOneAsync
method in the Guarantor
class. The code is probably a bit too long for SO, but it is as minimal a demo I could create that captures all of the important elements.
ANSWER
Answered 2021-Sep-12 at 16:01Yes, you can avoid the allocation of TaskCompletionSource
instances, by using lightweight ValueTask
s instead of Task
s. At first you need a reusable object that can implement the IValueTaskSource
interface, and the Message
seems like the perfect candidate. For implementing this interface you can use the ManualResetValueTaskSourceCore
struct. This is a mutable struct, so it should not be declared as readonly
. You just need to delegate the interface methods to the corresponding methods of this struct with the very long name:
QUESTION
I have the following output from the following command
...ANSWER
Answered 2021-Sep-02 at 17:28With your shown samples, attempts please try following awk
code. Since I don't have zookeeper command with me, I had written this code and tested it as per your shown output only.
QUESTION
I have code like below
...ANSWER
Answered 2021-Aug-12 at 12:07I had to give two different client_id
s for the two instances of Client
and it solved the issue.
QUESTION
I'm using OpenTelemetry with AWS X-Ray to trace E2E messaging between:
Producer (JVM) -> Kafka Broker -> Consumers (Multiple, Python-based)
Generated traces are then send to AWS OTEL Collector which forwards them to AWS X-Ray.
However when I see them from X-Ray consumer trace is displayed as a sub-segment of producer:
I'm expecting to see consumer as a separate segment.
I've also tried to use AWS X-Ray SDK in the consumer side to explicitly initialize a new segment as following:
...ANSWER
Answered 2021-Jul-13 at 16:15I had a chat with AWS X-Ray team and they helped me solve my issue.
The reason for this issue is that awsxray exporter
only creates new segments for Spans when kind=SpanKind.SERVER
.
I have implemented this (in Python) using OpenTelemetry SDK and explicitely declaring kind=SpanKind.SERVER
when creating a new span
QUESTION
I'm trying to run a local kafka-connect cluster using docker-compose. I need to connect on a remote database and i'm also using a remote kafka and schema-registry. I have enabled access to these remotes resources from my machine.
To start the cluster, on my project folder in my Ubuntu WSL2 terminal, i'm running
docker build -t my-connect:1.0.0
docker-compose up
The application runs successfully, but when I try to create a new connector, returns error 500 with timeout.
My Dockerfile
...ANSWER
Answered 2021-Jul-06 at 12:09You need to set correctly rest.advertised.host.name
(or CONNECT_REST_ADVERTISED_HOST_NAME
, if you’re using Docker).
This is how a Connect worker communicates with other workers in the cluster.
For more details see Common mistakes made when configuring multiple Kafka Connect workers
by Robin Moffatt.
In your case try to remove CONNECT_REST_ADVERTISED_HOST_NAME=localhost
from compose file.
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install broker
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page