Не могу понять, как интегрировать websockets с rabbitmq - PullRequest
1 голос
/ 04 ноября 2019

Я недавно начал проект, который имеет дело с rabbitmq, websockets и push-уведомлениями. Я установил связь rabbitmq между слушателем и отправителем, но теперь я застрял в понимании того, что добавить в приложение для части websocket / push-уведомления. Я просмотрел различные учебные пособия в Интернете, но учебные пособия не совсем совпадают, и я не понимаю, как действовать дальше.

В моих проектах предполагается, что я читаю список действий пациента из файла и каждые 3 или 5 секунд отправляю строку этого списка в веб-часть для дальнейшего просмотра (у меня также есть некоторые правила для действий),Мне удалось сделать большую часть отправки с rabbitmq + amqp, и теперь я борюсь с тем, что делать после этого. Как добавить веб-сокеты и как их подключить?

Ниже приведен мой класс слушателя rabbitmq:

package assignment2.Ass;

////spirng messaging is in the tutorial for the first part
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
        import org.springframework.amqp.core.Message;
        import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;

@Service
public class PracticalTipListener {

    private static final Logger log = LoggerFactory.getLogger(PracticalTipListener.class);

    @RabbitListener(queues = AssApplication.DEFAULT_PARSING_QUEUE)
    public void consumedDefaultMesage(final MessageDefinition message) {
        log.info("Message Received" + message.toString());
        Rules applyRules= new Rules(message);
    }
}

Отправитель

package assignment2.Ass;

import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import java.io.BufferedReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@Service
public class PracticalTipSender {
    private static final Logger log = LoggerFactory.getLogger(PracticalTipSender.class);
    int count=0;
    private final RabbitTemplate rabbitTemplate;

    FileReading fl= new FileReading();
    List<String> listaAct = fl.listaDespartita;

    public PracticalTipSender(RabbitTemplate rabbitTemplate) {
        this.rabbitTemplate = rabbitTemplate;
    }

    @Scheduled(fixedDelay = 3000L,initialDelay = 5000L)
    public void send() {

        String start= fl.dataMaker(listaAct.get(count),listaAct.get(count+1));
        String end= fl.dataMaker(listaAct.get(count+2),listaAct.get(count+3));
        String act=listaAct.get(count+4);
        System.out.println(start+end+act);

            MessageDefinition mes= new MessageDefinition("1",start,end,act);

            System.out.println(mes);
           count=count+5;
            rabbitTemplate.convertAndSend(AssApplication.EXCHANGE_NAME, AssApplication.ROUTING_KEY, mes);
            log.info("message sent");

    }

//

}

Это метод, из которого я подключаюсь к серверу rabbtitmq и создаю очередь


@SpringBootApplication
@EnableScheduling
public class AssApplication {
    public static final String EXCHANGE_NAME = "tips_tx";
    public static final String DEFAULT_PARSING_QUEUE = "default_parser_q";
    public static final String ROUTING_KEY = "tips";


    public static void main(String[] args) {
        SpringApplication.run(AssApplication.class, args);

    }

    @Bean
    public TopicExchange tipsExchange() {
        return new TopicExchange((EXCHANGE_NAME));
    }

    @Bean
    public Queue defaultParsingQueue() {
        return new Queue(DEFAULT_PARSING_QUEUE);
    }

    @Bean
    public Binding queueTopicExchange() {
        return BindingBuilder.bind(defaultParsingQueue()).to(tipsExchange()).with(ROUTING_KEY);
    }
    @Bean
    public Jackson2JsonMessageConverter produceJSON()
    {
        return new Jackson2JsonMessageConverter();
    }
    @Bean
    public RabbitTemplate rabbitTemplateConf(final ConnectionFactory conect)
    {
        RabbitTemplate rory= new RabbitTemplate(conect);
        rory.setMessageConverter(produceJSON());
        return rory;
    }

FileReading - это класс, в котором я читаю входной файл, а определение сообщения - это класс модели для моего сообщения (сообщения в формате JSON), правила - это некоторые правила для действия.

Была бы весьма признательна за помощь в том, как действовать дальше. Спасибо !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...