1 17 package org.apache.activemq.transport.reliable; 18 19 import org.apache.activemq.openwire.OpenWireFormat; 20 import org.apache.activemq.transport.udp.CommandDatagramSocket; 21 import org.apache.activemq.transport.udp.DatagramHeaderMarshaller; 22 import org.apache.activemq.transport.udp.UdpTransport; 23 import org.apache.commons.logging.Log; 24 import org.apache.commons.logging.LogFactory; 25 26 import java.io.IOException ; 27 import java.net.DatagramSocket ; 28 import java.net.SocketAddress ; 29 30 34 public class UnreliableCommandDatagramSocket extends CommandDatagramSocket { 35 private static final Log log = LogFactory.getLog(UnreliableCommandDatagramSocket.class); 36 37 private DropCommandStrategy dropCommandStrategy; 38 39 public UnreliableCommandDatagramSocket(UdpTransport transport, OpenWireFormat wireFormat, int datagramSize, 40 SocketAddress targetAddress, DatagramHeaderMarshaller headerMarshaller, DatagramSocket channel, 41 DropCommandStrategy strategy) { 42 super(transport, wireFormat, datagramSize, targetAddress, headerMarshaller, channel); 43 this.dropCommandStrategy = strategy; 44 } 45 46 protected void sendWriteBuffer(int commandId, SocketAddress address, byte[] data, boolean redelivery) 47 throws IOException { 48 if (dropCommandStrategy.shouldDropCommand(commandId, address, redelivery)) { 49 log.info("Dropping datagram with command: " + commandId); 50 51 ReplayBuffer bufferCache = getReplayBuffer(); 53 if (bufferCache != null && !redelivery) { 54 bufferCache.addBuffer(commandId, data); 55 } 56 } 57 else { 58 super.sendWriteBuffer(commandId, address, data, redelivery); 59 } 60 } 61 } 62 | Popular Tags |