package org.act.tstream.message.zeroMq; import java.util.List; import org.zeromq.ZMQ.Socket; import backtype.storm.messaging.IConnection; import backtype.storm.messaging.TaskMessage; import backtype.storm.utils.DisruptorQueue; import org.act.tstream.metric.MetricDef; import org.act.tstream.metric.JStormHistogram; import org.act.tstream.metric.JStormTimer; import org.act.tstream.metric.Metrics; import org.act.tstream.utils.JStormServerUtils; /** * * @author longda * */ public class ZMQSendConnection implements IConnection { private org.zeromq.ZMQ.Socket socket; private boolean closed = false; private JStormTimer timer; private JStormHistogram histogram; private String prefix; public ZMQSendConnection(Socket _socket, String host, int port) { socket = _socket; prefix = JStormServerUtils.getName(host, port); timer = Metrics.registerTimer(prefix, MetricDef.ZMQ_SEND_TIME, null, Metrics.MetricType.WORKER); histogram = Metrics.registerHistograms(prefix, MetricDef.ZMQ_SEND_MSG_SIZE, null, Metrics.MetricType.WORKER); } @Override public void close() { socket.close(); closed = true; } @Override public boolean isClosed() { return closed; } @Override public void registerQueue(DisruptorQueue recvQueu) { throw new UnsupportedOperationException( "recvTask() Client connection should not receive any messages"); } @Override public void enqueue(TaskMessage message) { throw new UnsupportedOperationException( "recvTask() Client connection should not receive any messages"); } @Override public void send(List<TaskMessage> messages) { timer.start(); try { for (TaskMessage message : messages) { ZeroMq.send(socket, message.message()); } } finally { timer.stop(); histogram.update(messages.size()); } } @Override public void send(TaskMessage message) { timer.start(); try { ZeroMq.send(socket, message.message()); } finally { timer.stop(); histogram.update(1); } } @Override public TaskMessage recv(int flags) { throw new UnsupportedOperationException( "recvTask() Client connection should not receive any messages"); } }