Is this related to Remote Debugging or to other usage?
If other usage, can you please start a new thread and describe what you're usage is there?
Announcement
Collapse
No announcement yet.
X
-
Also, I'm considering to try the stream protocol instead of AMQP https://github.com/rabbitmq/rabbitmq.../PROTOCOL.adoc
Have you tried it? How would I configure the Realtime Messaging to use it?
Leave a comment:
-
Hello Isomorphic we have a problem where RabbitMQ memory consumption grows day by day even with low usage. We're now using RabbitMQ 3.10.8, we're using streams with AMQP protocol 0-9-1
Now on the RabbitMQ forum they're asking for details about the consuming application:
https://groups.google.com/g/rabbitmq.../c/Pt8tZQIE8mo
Can you tell me more about how your consuming applications are using streams over AMQP. Do they disconnect frequently? If so do they send a basic.cancel first or just terminate the channel?
EDIT: see https://forums.smartclient.com/forum...time-messagingLast edited by claudiobosticco; 8 Dec 2022, 14:31.
Leave a comment:
-
Originally posted by claudiobosticco View PostSmartClient Version: v13.0p_2022-05-17/Enterprise Deployment (built 2022-05-17)
Hello Isomorphic I think I've found a little bug.
It seems that the connect method of JMSMessageDispatcher is actually picking up only the messaging.jms.connectionFactory property and not topicConnectionFactory/queueConnectionFactory, ie if I define a messaging.jms.topicConnectionFactory: myConnectionFactory it will only look for the default jms/ConnectionFactory.
This seems to happen because when looking for messaging.jms.connectionFactory JMSException is catched, instead of Exception.
Leave a comment:
-
Hello Isomorphic , sorry for the slow response.
Actually your suggested setting for the ConnectionFactory works like a charm, so now I'm using RabbitMQ streams.
Just in case someone else needs it, this is the working configuration (in the context.xml file of my application):
Code:<Resource name="jms/MyConnectionFactory" type="javax.jms.ConnectionFactory" factory="com.rabbitmq.jms.admin.RMQObjectFactory" username="user" password="pwd" virtualHost="my_VH" host="myRabbitMQ_host" channelsQos="100" threadsPerConnection="2" cleanUpServerNamedQueuesForNonDurableTopicsOnSessionClose="true"/> <ResourceLink global="jms/MyConnectionFactory" name="jms/MyConnectionFactory" type="javax.jms.ConnectionFactory"/> <Resource auth="Application" name="jms/myChannel" type="javax.jms.Topic" factory="com.rabbitmq.jms.admin.RMQObjectFactory" destinationName="myChannel" amqp="true" amqpExchangeName="jms.durable.topic" amqpRoutingKey="jms/myChannel" amqpQueueName="myChannel"/> <ResourceLink global="jms/myChannel" type="javax.jms.Topic" name="jms/myChannel"/>
Code:messaging.jms.context:_container_ messaging.jms.jndiPrefix:jms messaging.jms.connectionFactory:MyConnectionFactory messaging.jms.encoding:json
I'm using it with RabbitMQ 3.10.1, and the web application is deployed in a tomcat cluster.
Leave a comment:
-
The error message you are getting about a missing ActiveMQ class is just your application picking up default config. As you can see from your success with RabbitMQ, the error is not having a negative effect. In fact, it would have no effect even if you did have ActiveMQ present in your project, because you are already mapping RabbitMQ as the connection factory, and SmartClient's auto-mapping will not override that. You can suppress that error message by adding this setting to your server.properties file (this doesn't switch off JMS messaging, just the logic that auto-maps a connection factory)
Code:messaging.jms.publish: false
Code:channelsQos="100"
Note, all of these are only providing a single-queue solution at the RabbitMQ/JMS level; SmartClient would still be using a queue-per-subscriber
Leave a comment:
-
Sorry for the slow response, we have a number of things going on (including a surprise expired cert for this subdomain!). We are getting notifications, and we'll get to this as soon as we can
Leave a comment:
-
Hello, could you please just confirm if you're receiving notifications from this old thread? Otherwise I'll start a new one.
In the meantime, I've read in the RabbitMQ docs of this feature https://www.rabbitmq.com/streams.html
which seems to have the behaviour I'm looking for:
When wanting to deliver the same message to multiple subscribers users currently have to bind a dedicated queue for each consumer. If the number of consumers is large this becomes potentially inefficient, especially when wanting persistence and/or replication. Streams will allow any number of consumers to consume the same messages from the same queue in a non-destructive manner, negating the need to bind multiple queues.
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - consumer prefetch count is not set for 'queue 'updateMappaJtaChannel_1' in vhost 'JTA_VH'', class-id=60, method-id=20)
Leave a comment:
-
SmartClient Version: v13.0p_2022-05-17/Enterprise Deployment (built 2022-05-17)
Hello Isomorphic I think I've found a little bug.
It seems that the connect method of JMSMessageDispatcher is actually picking up only the messaging.jms.connectionFactory property and not topicConnectionFactory/queueConnectionFactory, ie if I define a messaging.jms.topicConnectionFactory: myConnectionFactory it will only look for the default jms/ConnectionFactory.
This seems to happen because when looking for messaging.jms.connectionFactory JMSException is catched, instead of Exception.
Leave a comment:
-
I forgot to add that also the remote debugging is working, and is using RabbitMQ.
Also, I noticed this log at startup:
Code:INFO ISCInit JMS JNDI publishing is enabled, but configured messaging.jms.vm.factory class org.apache.activemq.ActiveMQConnectionFactory is not present in runtime - proceeding without publishing isomorphic JMS stub to JNDI
Leave a comment:
-
SmartClient Version: v13.0p_2022-05-17/Enterprise Deployment (built 2022-05-17)
Tomcat 8.5.78
Hello, I've got some questions and a summary which may be useful for others.
It does seem that the Messaging is working with RabbitMQ (3.10.1) with very little configuration.
After declaring the connection factory in the server.xml:
Code:<Resource name="jms/ConnectionFactory" type="javax.jms.ConnectionFactory" factory="com.rabbitmq.jms.admin.RMQObjectFactory" username="USER" password="PWD" virtualHost="/" host="myHost" threadsPerConnection="2" cleanUpServerNamedQueuesForNonDurableTopicsOnSessionClose="true" />
the messaging is working.
In the RabbitMQ "Queues" tab I see a queue for every consumer (and the cleanUpServerNamedQueuesForNonDurableTopicsOnSessionClose is working, so I don't see temporary queues growing in number).
I understand that the single consumer for every queue is the normal behaviour. If you configure (as I tried with amqp settings) a durable queue, it will have multiple consumers, but the messages will be delivered in a round robin sequence, so 2 consumers, 4 messages:
- consumer 1 will get messages 1 and 3
- consumer 2 will get messages 2 and 4
Please correct me if it's possible to have a single queue with multiple consumers where every consumer receives all messages.
Those temporary queues appear in the bindings under the Exchange jms.durable.topic, with the Routing Key equal to the channel identifier used in the Messaging api.
If you declare a resource like:
Code:<Resource auth="Container" name="jms/updateMappaJtaChannel" type="javax.jms.Topic" factory="com.rabbitmq.jms.admin.RMQObjectFactory" destinationName="jms/updateMappaJtaChannel" />
INFO JMSMessageDispatcher Destination for channel 'jms/updateMappaJtaChannel' not available via JNDI - dynamically creating
Now I think it would be nice to be able to create an Exchange and to have all queues of an application or channel bound to that custom Exchange.
Otherwise in the RabbitMQ console you'll see all queues from all channels/applications, in the same listing.
I've tried but without success.
Is it something you think it's currently possible?
Leave a comment:
-
Yes, they seem to have been resurrected somewhat, so there isn't a compelling reason to switch away to RabbitMQ if you are familiar with ActiveMQ and like it.
We wouldn't want to comment on the long-term viability of either project, as that is very difficult to assess.
Leave a comment:
-
Originally posted by Isomorphic View PostAs an aside, the RabbitMQ works fine out of the box. And ActiveMQ may not have a future: http://activemq.apache.org/new-features-in-60.html.
Leave a comment:
-
Now I'm confused: I've just discovered that if I use the 'publish message' feature in the rabbitMQ web console, to publish messages to my queue, I see it in browser A, first message published, browser B, 2nd message, browser C, 3rd message, and so on, browser A, 4th message, etc...
Leave a comment:
-
Hello, it seems that my comment about the MapMessage was really wrong, actually it was based on that line #320 of the error stacktrace:
Code:2019-02-06 16:19:01,088 ERROR JMSMessageDispatcher Unable to deliver jms message javax.jms.MessageFormatException: Not enough bytes in message body for UTF object at com.rabbitmq.jms.client.message.RMQBytesMessage.readUTF(RMQBytesMessage.java:206) at com.isomorphic.messaging.JMSMessageDispatcher.iscMessage(JMSMessageDispatcher.java:320)
Now I'm testing the latest build:
SmartClient Version: v11.1p_2019-02-09/Enterprise Deployment (built 2019-02-09)
and the previous error seems gone.
But the behaviour is erratic.
The consumer doesn't always receive the messages. If I have more than one consumer (a Chrome browser, a FF browser, a Safari browser, all on the same Mac), I see that sometimes one browser receives the message, sometimes two of them. I think that I've never seen all of them receive the message.
By chance, the consumers are connected to the same node of the cluster, while the producer is connected to the other node.
I've also tried to enable websockets, but I see this in all three browsers:
Code:ISC_RealtimeMessaging.js?isc_version=v100p_2015-07-13.js:45 WebSocket connection to 'wss://myDomain/backoffice/Jta/isomorphic/websocket?ts=1549906205516&isc_noLog=1&type=connect&connectionID=conn_1&subscribedChannels=%7B%0A%20%20%20%20%22jms%2FupdateMappaJtaChannel%22%3A%7B%0A%20%20%20%20%20%20%20%20subscriptionCallback%3Anull%0A%20%20%20%20%7D%0A%7D' failed: Error during WebSocket handshake: Unexpected response code: 404 isc_c_Messaging__connect @ ISC_RealtimeMessaging.js?isc_version=v100p_2015-07-13.js:45 (anonymous) @ VM11008:3 isc_c_Class_fireCallback @ ISC_Core.js?isc_version=v100p_2015-07-13.js:304 isc_c_Timer__fireTimeout @ ISC_Core.js?isc_version=v100p_2015-07-13.js:1764 (anonymous) @ ISC_Core.js?isc_version=v100p_2015-07-13.js:1761
Leave a comment:
Leave a comment: