Поэтому я надеюсь, что смогу объяснить это достаточно хорошо, я новичок в технологиях JEE и JMS.
В настоящее время я работаю над Linux, используя технологии Jboss и Wildfly. Весь описанный проект сохранен в: BoldiApp на GitHUb
Я пытаюсь писать приложения, использующие шаблон маршрутизатора сообщений. Класс производителя (Bolid) генерирует случайные числа, отправляет их классу маршрутизатора (BolidMonitor), затем класс маршрутизатора анализирует числа и пересылает их в соответствующую очередь.
Проблема, с которой я столкнулся, касается класса BolidMonitor, теперь все сообщение String отправляется в класс BolidMonitor, и я не могу перехватывать только int, отправленные Bolid для их анализа.
Может ли кто-нибудь помочь с перехватом БолидМонитором таких значений, как скорость, масло и т.д.
Заранее спасибо и извините, если что-то не так понял
Болид класс:
@JMSDestinationDefinitions(value = {
@JMSDestinationDefinition(name = "java:/queue/myQueue", interfaceName = "javax.jms.Queue", destinationName = "BolidMonitor"),
@JMSDestinationDefinition(name = "java:/topic/myTopic", interfaceName = "javax.jms.Topic", destinationName = "BolidLogger") })
@WebServlet(urlPatterns = "/")
public class Bolid extends HttpServlet {
private static final long serialVersionUID = 3234027581994367438L;
public static double getRandomIntegerBetweenRange(double min, double max) {
double x = (int) (Math.random() * ((max - min) + 1)) + min;
return x;
}
@EJB
MessangeProducer producer;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int speed = (int) getRandomIntegerBetweenRange(0, 350);
int oil = (int) getRandomIntegerBetweenRange(300, 400);
double tire = getRandomIntegerBetweenRange(1.7, 2.2);
String data = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss").format(new Date()).toString();
String messange = data + "\nVehicle speed: " + speed + " km/h" + "\nOil pressure is: " + oil + " kPa"
+ "" + "\nTire pressure is : " + tire + " bar" + "/n";
producer.sendMessange2(messange);
producer.sendMessange(messange);
resp.getWriter().write("Message from bolid: " + messange);
}
private Map<Long, Bolid> categoryMap;
public void updateCategoryMap(Integer startPosition, Integer maxResult) {
categoryMap = new HashMap<Long, Bolid>();
int speed = (int) getRandomIntegerBetweenRange(0, 350);
int oil = (int) getRandomIntegerBetweenRange(300, 400);
double tire = getRandomIntegerBetweenRange(1.7, 2.2);
String data = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss").format(new Date()).toString();
String messange = data + "\nVehicle speed: " + speed + " km/h" + "\nOil pressure is: " + oil + " kPa"
+ "" + "\nTire pressure is : " + tire + " bar" + "/n";
producer.sendMessange2(messange);
producer.sendMessange(messange);
}
}
БолидМонитор:
@MessageDriven(name = "BolidMonitor", activationConfig = {
@ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "queue/myQueue"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge")
})
public class BolidMonitor implements MessageListener {
private static Logger LOGGER = Logger.getLogger(BolidMonitor.class.toString());
public void onMessage(Message messange) {
if (messange instanceof TextMessage) {
try {
String text = ((TextMessage) messange).getText();
LOGGER.info("Message send to BolidMonitor from Bolid : " + text);
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
1 ответ
Вы отправляете данные в виде необработанного текста, который затем необходимо проанализировать в потребителе. Вы могли бы избавить себя от необходимости анализировать текстовые данные в потребителе, если бы отправили сообщение более структурированным образом. Я рекомендую создать javax.jms.MapMessage
и использование setInt(String, int)
и setDouble(String, double)
методы . Вы также можете просто установить данные как свойства на TextMessage
(например, используя setIntProperty(String, int)
и setDoubleProperty(String, double)
методы).
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.