Sonarqube 将消息发送到ActiveMQ时删除Thread.sleep()
我在修复项目中的声纳线头错误。我看到过一段代码,sonar lint给了我一个错误的规则Sonarqube 将消息发送到ActiveMQ时删除Thread.sleep(),sonarqube,activemq,Sonarqube,Activemq,我在修复项目中的声纳线头错误。我看到过一段代码,sonar lint给了我一个错误的规则squid:S2276来代替线程。sleep(100);使用wait()。但wait()应该在条件循环中,以避免错误的唤醒问题。但我没有得到这样一个条件,我应该如何使用 不睡觉我能做同样的事情吗 }一个精心设计的for循环,迭代次数是您想要重试的次数,如果事情正常,一些异常处理逻辑会中断循环,这可能会以稍微清晰的方式实现,否则使用ScheduledThreadPoolExecutor或计时器将是一个选项 谢谢
squid:S2276
来代替线程。sleep(100);使用wait()。但wait()应该在条件循环中,以避免错误的唤醒问题。但我没有得到这样一个条件,我应该如何使用
不睡觉我能做同样的事情吗
}一个精心设计的for循环,迭代次数是您想要重试的次数,如果事情正常,一些异常处理逻辑会中断循环,这可能会以稍微清晰的方式实现,否则使用ScheduledThreadPoolExecutor或计时器将是一个选项 谢谢你抽出宝贵的时间。你能分享一段代码吗?
public class ACTOOBEventSubSMSProducer {
private ACTOOBEventSubSMSProducer(){
super();
}
private static Logger logger = LoggerManager.getInstance().getCoreProcessingLogger();
public static final String CONNECTION_FACTORY = "java:jboss/activemq/ConnectionFactory";
static final String QUEUE_NAME = "java:jboss/exported/jms/queue/actOOBEventSubscriptionSMS";
static ConnectionFactory connectionFactory = null;
static Connection connection = null;
static Session session = null;
static Destination destination = null;
static MessageProducer messageProducer = null;
static {
connectionFactory = ServiceLocator.getJmsConnectionFactory(CONNECTION_FACTORY);
try {
connection = connectionFactory.createConnection();
session = connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
destination = ServiceLocator.getJmsDestination(QUEUE_NAME);
messageProducer = session.createProducer(destination);
messageProducer.setDisableMessageID(true);
messageProducer.setDisableMessageTimestamp(true);
} catch (JMSException e) {
logger.error("Error in creating ConnectionFactory",e);
}
}
/**
* This method sends OOB Event SMS Message in Queue.
*
* @param message
*/
public static synchronized void sendMessage(Serializable payload) throws JmsProducerException {
try {
ObjectMessage message = session.createObjectMessage(payload);
messageProducer.send(message, javax.jms.DeliveryMode.NON_PERSISTENT, javax.jms.Message.DEFAULT_PRIORITY,
1800000);
} catch (JMSException je) {
try {
Thread.sleep(100);
ObjectMessage message = session.createObjectMessage(payload);
messageProducer.send(message, javax.jms.DeliveryMode.PERSISTENT, javax.jms.Message.DEFAULT_PRIORITY,
1800000);
} catch (JMSException jee) {
logger.error("Error in sendMessage()",jee);
throw new JmsProducerException(jee);
} catch (InterruptedException ie) {
logger.error("Error in sendMessage()",ie);
Thread.currentThread().interrupt();
throw new JmsProducerException(ie);
}
} catch (ServiceLocatorException sle) {
logger.error("Error in sendMessage()",sle);
throw new JmsProducerException(sle);
}
}