JMS Message Router - обработка переменных (int и double) - PullRequest
1 голос
/ 24 апреля 2020

Итак, я надеюсь, что смогу объяснить это достаточно хорошо, я новичок в технологиях JEE и JMS.

В настоящее время я работаю над Linux, используя технологии Jboss и Wildfly. Весь описанный проект сохраняется в: BoldiApp на GitHUb

Я пытаюсь написать приложения, использующие шаблон маршрутизатора сообщений. Класс производителя (Bolid) генерирует случайные числа, отправляет их в класс маршрутизатора (BolidMonitor), затем класс маршрутизатора анализирует числа и пересылает их в соответствующую очередь.

Проблема, с которой я столкнулся, теперь касается класса BolidMonitor. все сообщение String отправляется в класс BolidMonitor, и я не могу перехватить только int, отправленные Bolid для их анализа.

Может ли кто-нибудь помочь с перехватом BolidMonitor таких значений, как скорость, масло и c.

Заранее спасибо, и мне жаль, если что-то не совсем понятно

Класс 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);

    }
}

BolidMonitor:

@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 Ответ

0 голосов
/ 24 апреля 2020

Вы отправляете данные в виде необработанного текста , который затем необходимо проанализировать у потребителя. Вы можете избавить себя от необходимости разбирать текстовые данные у потребителя, если отправите сообщение более структурированным способом. Я рекомендую создать методы javax.jms.MapMessage и методы setInt(String, int) и setDouble(String, double). Вы также можете просто установить данные как свойства на TextMessage (например, используя методы setIntProperty(String, int) и setDoubleProperty(String, double)).

...