[英]activemq UDP jms connection
我在使用activemq java的項目上工作,我使用ssl或udp連接。要接收messqge,我使用QeueueReceiver和MessageListener類。問題是ssl連接完美,但是當我選擇udp連接並發送7條消息后我放在工作的偵聽器中,我僅收到2條消息后收到5條消息。 我不知道sombedoy可以幫助您解決什么問題,請輸入代碼
代碼ry {開關(協議){情況“ UDP”:connectionFactoryUDP =新的ActiveMQConnectionFactory(brokerUrlUDP); 連接= connectionFactoryUDP.createQueueConnection(用戶名,密碼);
break;
case "TLS":
connectionFactoryTLS = new ActiveMQSslConnectionFactory();
// create connection
connectionFactoryTLS.setBrokerURL(brokerUrlTLS);
connectionFactoryTLS.setTrustStore(trustStore);
connectionFactoryTLS.setTrustStorePassword(trustStorePassword);
connectionFactoryTLS.setKeyStore(keyStore);
connectionFactoryTLS.setKeyStorePassword(keyStorePassword);
connection = connectionFactoryTLS.createQueueConnection(username,password);
break;}
//ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(this.username, this.password, "tcp://localhost:61616");
// create connection
// start
connection.start();
// create session
// create queue (it will create if queue doesn't exist)
// create listener
System.out.println("____________________________________");
MessageListener messageListener = new MessageListener() {
@Override
public void onMessage(Message message) {
System.out.println("____________________________________");
// only text type message
if (message instanceof TextMessage) {
TextMessage txt = (TextMessage) message;
try {
System.out.println("Message received =---_________--" + txt.getText());
} catch (JMSException e) {
System.out.println("error retrieving message");
System.exit(1);
}
}
}
};
session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue(queueName);
QueueReceiver consumer = session.createReceiver(queue);
consumer.setMessageListener(messageListener);
System.in.read();
consumer.close();
session.close();
connection.close();
System.out.println("-----------closed----------");
日志控制台2015-10-16 18:30:42 DEBUG UdpTransport:382-綁定到地址:0.0.0.0/0.0.0.0:0 2015-10-16 18:30:42 DEBUG Connection:1:55-SENDING:ConnectionInfo {commandId = 1,responseRequired = true,connectionId = ID:aymenmhidhi-PC-57832-1445013042216-1:1,clientId = ID:aymenmhidhi-PC-57832-1445013042216-0:1,clientIp = null,userName = aymenmhidhi,密碼= *****,brokerPath = null,brokerMasterConnector =否,可管理= true,clientMaster = true,faultTolerant =否,failoverReconnect = false} 2015-10-16 18:30:42 DEBUG UdpTransport:124-從以下位置發送單向: udp:// localhost:61625?trace = true @ 49257到目標:localhost / 127.0.0.1:61625命令:ConnectionInfo {commandId = 1,responseRequired = true,connectionId = ID:aymenmhidhi-PC-57832-1445013042216-1:1 ,clientId = ID:aymenmhidhi-PC-57832-1445013042216-0:1,clientIp = null,userName = aymenmhidhi,password = *****,brokerPath = null,brokerMasterConnector = false,可管理= true,clientMaster = true,faultTolerant = f 其他,failoverReconnect = false} 2015-10-16 18:30:42 DEBUG DefaultReplayBuffer:47-將命令ID:1添加到重播緩沖區:org.apache.activemq.transport.reliable.DefaultReplayBuffer@7e3e2cff對象:java.nio.DirectByteBuffer [pos = 129 lim = 4096 cap = 4096] 2015-10-16 18:30:42 DEBUG CommandDatagramChannel:242-通道:udp:// localhost:61625?trace = true @ 49257發送數據報:1至:localhost / 127.0 .0.1:61625 2015-10-16 18:30:42 DEBUG CommandDatagramChannel:110-頻道:udp:// localhost:61625?trace = true @ 49257接收自:端點[名稱:/127.0.0.1:49258]關於流程:響應{commandId = 1,requestRequired = false,correlationId = 1} 2015-10-16 18:30:42調試連接:1:60-接收到:響應{commandId = 1,responseRequired = false,correlationId = 1} 2015 -10-16 18:30:42 DEBUG CommandDatagramChannel:110-通道:udp:// localhost:61625?trace = true @ 49257接收自:要處理的端點[name:/127.0.0.1:49258]:ConnectionControl {commandId = 2,responseRequired =否,懷疑 nd =否,簡歷=否,關閉=否,退出=否,faultTolerant =否,connectedBrokers =,reconnectTo =,令牌= null,rebalanceConnection =否} 2015-10-16 18:30:42調試連接:1:60 -已接收:ConnectionControl {commandId = 2,responseRequired = false,suspend = false,resume = false,close = false,exit = false,faultTolerant = false,connectedBrokers =,reconnectTo =,token = null,rebalanceConnection = false} 2015-10 -16 18:30:42 DEBUG CommandDatagramChannel:110-通道:udp:// localhost:61625?trace = true @ 49257收到自:要處理的端點[name:/127.0.0.1:49258]:BrokerInfo {commandId = 3 ,responseRequired =否,brokerId = ID:aymenmhidhi-PC-57133-1445011516433-0:1,brokerURL = tcp:// aymenmhidhi-PC:61616,slaveBroker =否,masterBroker =否,faultTolerantConfiguration =否,networkConnection =否,duplexConnection =否,peerBrokerInfos =空,brokerName =本地主機,connectionId = 0,brokerUploadUrl =空,networkProperties =空 } 2015-10-16 18:30:42調試連接:1:60-收到:BrokerInfo {commandId = 3,responseRequired = false,brokerId = ID:aymenmhidhi-PC-57133-1445011516433-0:1,brokerURL = tcp: // aymenmhidhi-PC:61616,slaveBroker =否,masterBroker =否,faultTolerantConfiguration =否,networkConnection =否,duplexConnection =否,peerBrokerInfos =否,brokerName =本地主機,connectionId = 0,brokerUploadUrl =否,networkProperties =否} 2015- 10-16 18:30:42調試連接:1:55-發送:ConsumerInfo {commandId = 2,responseRequired = true,consumerId = ID:aymenmhidhi-PC-57832-1445013042216-1:1:-1:1,目標= ActiveMQ.Advisory.TempQueue,ActiveMQ.Advisory.TempTopic,prefetchSize = 1000,maximumPendingMessageLimit = 0,瀏覽器= false,dispatchAsync = true,選擇器= null,clientId = null,subscriptionName = null,noLocal = true,排他= false,追溯= false,優先級= 0,brokerPath = null,optimizedAcknowledge = false,noRangeAcks = false,additionalPredicate = null} 2015-10-16 18:30:42 DEBUG UdpTransport:124-從udp:// localhost:61625?trace = true @ 49257單向發送至目標:/127.0.0.1:49258命令:ConsumerInfo {commandId = 2,responseRequired = true,消費者ID = ID:aymenmhidhi-PC-57832-1445013042216-1:1:-1:1,目標= ActiveMQ.Advisory.TempQueue,ActiveMQ.Advisory.TempTopic,prefetchSize = 1000,maximumPendingMessageLimit = 0,瀏覽器=否,dispatchAsync =否,選擇器=否,clientId =否,subscriptionName =否,noLocal =否,獨占=否,追溯=否,優先級= 0,brokerPath =否,OptimizedAcknowledge =否,noRangeAcks =否,AdditionalPredicate = } 2015-10-16 18:30:42調試DefaultReplayBuffer:47-添加命令ID:2以重播緩沖區:org.apache.activemq.transport.reliable.DefaultReplayBuffer@7e3e2cff對象:java.nio.DirectByteBuffer [pos = 155 lim = 4096 cap = 4096] 2015-10-16 18:30:42 DEBUG CommandDatagramChannel:242-頻道:udp:// localhost:61625?trace = true @ 49257發送數據報:2至 :/127.0.0.1:49258 2015-10-16 18:30:42 DEBUG CommandDatagramChannel:110-通道:udp:// localhost:61625?trace = true @ 49257接收自:端點[名稱:/127.0.0.1:49258 ]即將處理:響應{commandId = 4,responseRequired = false,correlationId = 2} 2015-10-16 18:30:42調試連接:1:60-已接收:響應{commandId = 4,responseRequired = false,correlationId = 2}
brokerurl brokerUrlUDP = udp:// localhost:61625?trace = true
謝謝。
package eu.dedalus.x1v1.arr.arrReceiver;
import java.util.concurrent.ThreadPoolExecutor;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueReceiver;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.ActiveMQSslConnectionFactory;
import org.apache.activemq.broker.TransportConnector;
import org.apache.log4j.Logger;
import org.springframework.scheduling.annotation.Scheduled;
public class ActiveMQQueuListener {
private static final Logger log = Logger
.getLogger(ActiveMQQueuListener.class.getName());
private String brokerUrlTLS;
private String brokerUrlUDP;
private String username;
private String password;
private ArrListener listener;
private String queueName;
private String protocol;
private String keyStore;
private String trustStore;
private String keyStorePassword;
private String trustStorePassword;
private boolean exit = false;
private QueueConnection connection = null;
private QueueSession session = null;
private ActiveMQConnectionFactory connectionFactoryUDP;
private ActiveMQSslConnectionFactory connectionFactoryTLS;
private MessageConsumer consumer;
private ThreadPoolExecutor executor;
private TransportConnector connector;
public void startReceiving() throws Exception {
System.out.println("------Start receiving---------");
try {
switch (protocol) {
case "UDP":
connectionFactoryUDP = new ActiveMQConnectionFactory(
brokerUrlUDP);
connection = connectionFactoryUDP.createQueueConnection(
username, password);
break;
case "TLS":
connectionFactoryTLS = new ActiveMQSslConnectionFactory();
// create connection
connectionFactoryTLS.setBrokerURL(brokerUrlTLS);
connectionFactoryTLS.setTrustStore(trustStore);
connectionFactoryTLS.setTrustStorePassword(trustStorePassword);
connectionFactoryTLS.setKeyStore(keyStore);
connectionFactoryTLS.setKeyStorePassword(keyStorePassword);
connection = connectionFactoryTLS.createQueueConnection(
username, password);
break;
}
// ConnectionFactory connectionFactory = new
// ActiveMQConnectionFactory(this.username, this.password,
// "tcp://localhost:61616");
// create connection
// start
connection.start();
// create session
// create queue (it will create if queue doesn't exist)
// create listener
MessageListener messageListener = new MessageListener() {
@Override
public void onMessage(Message message) {
// only text type message
if (message instanceof TextMessage) {
TextMessage txt = (TextMessage) message;
try {
System.out
.println("Message received =---_________--"
+ txt.getText());
} catch (JMSException e) {
System.out.println("error retrieving message");
System.exit(1);
}
}
}
};
session = connection.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue(queueName);
QueueReceiver consumer = session.createReceiver(queue);
consumer.setMessageListener(messageListener);
System.in.read();
consumer.close();
session.close();
connection.close();
System.out.println("-----------closed----------");
} catch (Exception e) {
System.out.println("Exception while sending message to the queue"
+ e);
throw e;
}
}
public void setListener(ArrListener listener) {
this.listener = listener;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public ArrListener getListener() {
return listener;
}
public static Logger getLog() {
return log;
}
public String getQueueName() {
return queueName;
}
public void setQueueName(String queueName) {
this.queueName = queueName;
}
public String getProtocol() {
return protocol;
}
public void setProtocol(String protocol) {
this.protocol = protocol;
}
public String getKeyStore() {
return keyStore;
}
public void setKeyStore(String keyStore) {
this.keyStore = keyStore;
}
public String getTrustStore() {
return trustStore;
}
public void setTrustStore(String trustStore) {
this.trustStore = trustStore;
}
public String getKeyStorePassword() {
return keyStorePassword;
}
public void setKeyStorePassword(String keyStorePassword) {
this.keyStorePassword = keyStorePassword;
}
public String getTrustStorePassword() {
return trustStorePassword;
}
public void setTrustStorePassword(String trustStorePassword) {
this.trustStorePassword = trustStorePassword;
}
public String getBrokerUrlTLS() {
return brokerUrlTLS;
}
public void setBrokerUrlTLS(String brokerUrlTLS) {
this.brokerUrlTLS = brokerUrlTLS;
}
public String getBrokerUrlUDP() {
return brokerUrlUDP;
}
public void setBrokerUrlUDP(String brokerUrlUDP) {
this.brokerUrlUDP = brokerUrlUDP;
}
public void exitMethod() {
System.exit(1);
try {
consumer.close();
session.close();
connection.close();
System.out.println("-----------closed----------");
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public boolean isExit() {
return exit;
}
public void setExit(boolean exit) {
this.exit = exit;
}
public Connection getConnection() {
return connection;
}
public ActiveMQConnectionFactory getConnectionFactoryUDP() {
return connectionFactoryUDP;
}
public void setConnectionFactoryUDP(
ActiveMQConnectionFactory connectionFactoryUDP) {
this.connectionFactoryUDP = connectionFactoryUDP;
}
public ActiveMQSslConnectionFactory getConnectionFactoryTLS() {
return connectionFactoryTLS;
}
public void setConnectionFactoryTLS(
ActiveMQSslConnectionFactory connectionFactoryTLS) {
this.connectionFactoryTLS = connectionFactoryTLS;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.