diff --git a/broker/pom.xml b/broker/pom.xml
index 6910e0ee..304d3a7a 100644
--- a/broker/pom.xml
+++ b/broker/pom.xml
@@ -33,9 +33,9 @@
- com.googlecode.disruptor
+ com.lmax
disruptor
- 2.7.1
+ 3.3.0
diff --git a/broker/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/ProtocolProcessor.java b/broker/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/ProtocolProcessor.java
index abeebe5f..cbe77030 100644
--- a/broker/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/ProtocolProcessor.java
+++ b/broker/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/ProtocolProcessor.java
@@ -15,10 +15,9 @@
*/
package org.dna.mqtt.moquette.messaging.spi.impl;
-import com.lmax.disruptor.BatchEventProcessor;
import com.lmax.disruptor.EventHandler;
import com.lmax.disruptor.RingBuffer;
-import com.lmax.disruptor.SequenceBarrier;
+import com.lmax.disruptor.dsl.Disruptor;
import java.nio.ByteBuffer;
import java.util.Collection;
import java.util.HashMap;
@@ -110,7 +109,6 @@ class ProtocolProcessor implements EventHandler {
private Map m_willStore = new HashMap();
private ExecutorService m_executor;
- BatchEventProcessor m_eventProcessor;
private RingBuffer m_ringBuffer;
ProtocolProcessor() {}
@@ -135,13 +133,12 @@ class ProtocolProcessor implements EventHandler {
//init the output ringbuffer
m_executor = Executors.newFixedThreadPool(1);
- m_ringBuffer = new RingBuffer(ValueEvent.EVENT_FACTORY, 1024 * 32);
+ Disruptor disruptor = new Disruptor(ValueEvent.EVENT_FACTORY, 1024 * 32, m_executor);
+ disruptor.handleEventsWith(this);
+ disruptor.start();
- SequenceBarrier barrier = m_ringBuffer.newBarrier();
- m_eventProcessor = new BatchEventProcessor(m_ringBuffer, barrier, this);
- //TODO in a presentation is said to don't do the followinf line!!
- m_ringBuffer.setGatingSequences(m_eventProcessor.getSequence());
- m_executor.submit(m_eventProcessor);
+ // Get the ring buffer from the Disruptor to be used for publishing.
+ m_ringBuffer = disruptor.getRingBuffer();
}
@MQTTMessage(message = ConnectMessage.class)
@@ -228,7 +225,7 @@ class ProtocolProcessor implements EventHandler {
}
LOG.debug("processConnect sent OK ConnAck");
session.write(okResp);
- LOG.info("Connected client ID <{}> with clean session {}", msg.getClientID(), msg.isCleanSession());
+ LOG.warn("Connected client ID <{}> with clean session {}", msg.getClientID(), msg.isCleanSession());
LOG.info("Create persistent session for clientID {}", msg.getClientID());
m_sessionsStore.addNewSubscription(Subscription.createEmptySubscription(msg.getClientID(), true), msg.getClientID()); //null means EmptySubscription
@@ -525,7 +522,7 @@ class ProtocolProcessor implements EventHandler {
//cleanup the will store
m_willStore.remove(clientID);
- LOG.info("Disconnected client <{}> with clean session {}", clientID, cleanSession);
+ LOG.warn("Disconnected client <{}> with clean session {}", clientID, cleanSession);
}
void proccessConnectionLost(String clientID) {
diff --git a/broker/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessaging.java b/broker/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessaging.java
index a0e44b1f..47bc7f25 100644
--- a/broker/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessaging.java
+++ b/broker/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessaging.java
@@ -15,10 +15,11 @@
*/
package org.dna.mqtt.moquette.messaging.spi.impl;
-import com.lmax.disruptor.BatchEventProcessor;
+import com.lmax.disruptor.BusySpinWaitStrategy;
import com.lmax.disruptor.EventHandler;
import com.lmax.disruptor.RingBuffer;
-import com.lmax.disruptor.SequenceBarrier;
+import com.lmax.disruptor.SleepingWaitStrategy;
+import com.lmax.disruptor.dsl.Disruptor;
import java.util.List;
import java.util.Properties;
@@ -26,6 +27,8 @@ import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
+
+import com.lmax.disruptor.dsl.ProducerType;
import org.dna.mqtt.moquette.messaging.spi.IMessaging;
import org.dna.mqtt.moquette.messaging.spi.ISessionsStore;
import org.dna.mqtt.moquette.messaging.spi.IMessagesStore;
@@ -61,7 +64,6 @@ public class SimpleMessaging implements IMessaging, EventHandler {
private ISessionsStore m_sessionsStore;
private ExecutorService m_executor;
- BatchEventProcessor m_eventProcessor;
private static SimpleMessaging INSTANCE;
@@ -83,15 +85,15 @@ public class SimpleMessaging implements IMessaging, EventHandler {
public void init(Properties configProps) {
subscriptions = new SubscriptionsStore();
m_executor = Executors.newFixedThreadPool(1);
+ Disruptor disruptor = new Disruptor(ValueEvent.EVENT_FACTORY, 1024 * 32, m_executor);
+ /*Disruptor disruptor = new Disruptor(ValueEvent.EVENT_FACTORY, 1024 * 32, m_executor,
+ ProducerType.MULTI, new BusySpinWaitStrategy());*/
+ disruptor.handleEventsWith(this);
+ disruptor.start();
- m_ringBuffer = new RingBuffer(ValueEvent.EVENT_FACTORY, 1024 * 32);
+ // Get the ring buffer from the Disruptor to be used for publishing.
+ m_ringBuffer = disruptor.getRingBuffer();
- SequenceBarrier barrier = m_ringBuffer.newBarrier();
- m_eventProcessor = new BatchEventProcessor(m_ringBuffer, barrier, this);
- //TODO in a presentation is said to don't do the following line!!
- m_ringBuffer.setGatingSequences(m_eventProcessor.getSequence());
- m_executor.submit(m_eventProcessor);
-
annotationSupport.processAnnotations(m_processor);
processInit(configProps);
// disruptorPublish(new InitEvent(configProps));
diff --git a/broker/src/test/resources/log4j.properties b/broker/src/test/resources/log4j.properties
index ccdb6fc4..12d1d3f9 100644
--- a/broker/src/test/resources/log4j.properties
+++ b/broker/src/test/resources/log4j.properties
@@ -5,7 +5,7 @@ log4j.rootLogger=ERROR, stdout, file
log4j.logger.org.dna.mqtt=INFO
log4j.logger.org.dna.mqtt.moquette.server.ServerIntegrationFuseTest=DEBUG
log4j.logger.org.dna.mqtt.moquette.server.ServerIntegrationQoSValidationTest=INFO
-log4j.logger.org.dna.mqtt.moquette.messaging.spi.impl.ProtocolProcessor=INFO
+log4j.logger.org.dna.mqtt.moquette.messaging.spi.impl.ProtocolProcessor=WARN
#log4j.logger.org.dna.mqtt.moquette.messaging.spi.impl.ProtocolProcessor=DEBUG
#log4j.logger.org.dna.mqtt.moquette.messaging.spi.impl.ProtocolProcessor=TRACE
log4j.logger.org.dna.mqtt.moquette.messaging.spi.impl.SimpleMessaging=WARN
@@ -25,7 +25,8 @@ log4j.appender.stdout.Threshold=DEBUG
# for debug trace
#log4j.appender.stdout.Threshold=TRACE
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] %-5p %c{1} %x - %m%n
+#log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] %-5p %c{1} %x - %m%n
+log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss,SSS} [%t] %-5p %c{1} %L %x - %m%n
#file appender
log4j.appender.file=org.apache.log4j.RollingFileAppender
@@ -34,4 +35,5 @@ log4j.appender.file.File=moquette.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%-4r [%t] %-5p %c{1} %x - %m%n
\ No newline at end of file
+#log4j.appender.file.layout.ConversionPattern=%-4r [%t] %-5p %c{1} %x - %m%n
+log4j.appender.file.layout.ConversionPattern=%d{HH:mm:ss,SSS} [%t] %-5p %c{1} %L %x - %m%n
diff --git a/bundle/pom.xml b/bundle/pom.xml
index 63ef6a76..0444d4e0 100644
--- a/bundle/pom.xml
+++ b/bundle/pom.xml
@@ -37,12 +37,11 @@
moquette-broker
${project.version}
-
+
- com.googlecode.disruptor
+ com.lmax
disruptor
- 2.7.1
-
+ 3.3.0
diff --git a/tools_scripts/publisher_client.groovy b/tools_scripts/publisher_client.groovy
index 98915e00..8f4797ca 100644
--- a/tools_scripts/publisher_client.groovy
+++ b/tools_scripts/publisher_client.groovy
@@ -17,7 +17,7 @@ MqttMessage message = new MqttMessage('Hello world!!'.bytes)
message.setQos(0)
print "publishing.."
long startTime = System.currentTimeMillis()
-(1..10).each {
+(1..1000000).each {
client.publish('topic', 'Hello world!!'.bytes, 0, false)
}
client.publish('/exit', 'Exit'.bytes, 0, false)