سؤال

لدي مستمع JMS، ولا بد لي من أخذ الرسالة ومعالجتها ثم إعادة توجيهها إلى صفحة باستخدام websocket.

حسنًا، أنا في حيرة من أمري بشأن التكوين، لقد قمت بتكوين WebSocketConfig:

@Configuration
@EnableWebSocketMessageBroker
@EnableScheduling
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
   @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic", "/queue");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws/firstep/").withSockJS();
        registry.addEndpoint("/ws/secondep/").withSockJS();
    }

وهذا يجب أن يكون صحيحا، فصفحة الويب الخاصة بي هي:

var socket = new SockJS("/myapp-web/api/ws/secondep/",undefined,options);
    var stompClient = Stomp.over(socket);
    stompClient.connect({
        company : "xxx"
    }, function(frame) {
        console.log('Connected: ' + frame);

          stompClient.subscribe('/topic/register', function(message){ 
            console.log('message: ' + message);     
          });

        stompClient.subscribe('/topic/update', function(message){ 
            console.log('message: ' + message);     
        });

ويعمل الاتصال.

الآن على مستمعي jms حاولت إرسال رسالة بهذه الطريقة:

public class ImporterListener implements MessageListener {

    Logger logger = LoggerFactory.getLogger(ImporterListner.class);
    @SendTo("/topic/register")
    private String TestMessage() {
        return "TestMessage";
    }

    @Override
    public void onMessage(Message message) {
        logger.info("Request on message");
        if (message instanceof MapMessage) {
            MapMessage t = (MapMessage) message;
             TestMessage(); //<--- have to send the message here

لكنها لا تعمل.الأسئلة هي:

  1. كيفية إرسال رسالة؟
  2. أين يجب علي تحديد نقطة النهاية (الثانية) عندما أرسل رسالة؟

شكرًا لك!هو موضع تقدير أي مساعدة!

هل كانت مفيدة؟

المحلول

TestMessage();//<--- يجب إرسال الرسالة هنا

لا، لا يجب الإرسال، لأنك تستخدم طريقة من نفس الفئة، ولكن @SendTo يجعل الخاص بك ImporterListener كوكيل و Advice ستعمل على الطريقة فقط من مكون آخر.

يجب عليك حقن هذا:

@Autowired
@Qualifier("brokerMessagingTemplate")
private MessageSendingOperations brokerMessagingTemplate;

وأرسل رسالة باستخدام ذلك:

brokerMessagingTemplate.convertAndSend("/topic/register", "TestMessage");

أين يجب علي تحديد نقطة النهاية (الثانية) عندما أرسل رسالة؟

إنه ل @MessageMapping("/ws/secondep") على بعض طرق POJO لتلقي الرسائل من العملاء.انها ليست للجزء الإرسال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top