کافکا و وب سوکت و کاستومایز نمودن وب سوکت در spring boot و reactjs.

ارسال پست
maryammaleki
پست: 2
تاریخ عضویت: سه شنبه 25 خرداد 1400, 3:18 pm

کافکا و وب سوکت و کاستومایز نمودن وب سوکت در spring boot و reactjs.

پست توسط maryammaleki » سه شنبه 25 خرداد 1400, 3:54 pm

شرح سوال ارسال یک پیغام از مسیج بروکر کافکا به وب سوکت و دریافت به وسیله یک وب سوکت کاستومایز شده که بشه مثلا با کمک id این موارد رو تفکیک کرد.
بک اند : اسپرینگ بوت
فرانت اند : ری اکت جی اس

1.نمونه کد و سمپل کد مربوط به قسمت لیسینر مسیج بروکر کافکا

کد: انتخاب همه

@Autowired
    SimpMessagingTemplate template;
    /// get message of kafka and send to  the websocket
    @KafkaListener(topics ="#{'${spring.kafka.topics}'.split(',')}", groupId =KafkaConstants.GROUP_ID_LOCATION)
    public void listen(MessageLocationDTO message) {
        System.out.println("sending via kafka listener..");
        template.convertAndSend("/topic/group",  message);

    }
و نمونه کد مربوط به لیسینر وب سوکت .2

کد: انتخاب همه

@Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        // chat client will use this to connect to the server
        registry.addEndpoint("/getChange")
                .setAllowedOrigins("*").withSockJS();

    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {

        registry.setApplicationDestinationPrefixes("/app");
        registry.enableSimpleBroker("/topic/");
        //        registry.setPathMatcher(new AntPathMatcher("."));
        //        registry.setUserDestinationPrefix("/user");
    }
نمونه کد مربوط به قسمت ری اکت که از

کد: انتخاب همه

import React, {useState} from 'react';
import SockJsClient from 'react-stomp';
import {urls} from "../../api/urls";



function Message({}){

 const SOCKET_URL = `https://localhost:8084/getChange/`;

  let onConnected = () => {
    console.log("Connected!!")
  }

  let onMessageReceived = (msg) => {
    console.log('New Message Received!!', msg);
    if (msg.branchId===8){
      console.log( X ${msg.x} ,  Y  ${msg.y});
    }
    else {
      console.log("تغییرات برای این قسمت نبوده است");
    }
  }

  return (
    <div className="app">
          <>
            <SockJsClient
              url={SOCKET_URL}
              topics={['/topic/group']}
              onConnect={onConnected}
              onDisconnect={console.log("Disconnected!")}
              onMessage={msg => onMessageReceived(msg)}
              debug={false}
            />

          </>
    </div>
  )


}

export default Message;

طرح سوال :
با توجه به اینکه وب سوکت یک ادرس مشخصی دارد و امکان استفاده از convertandsendtouser
وجود ندارد چون ساختار سمت فرانت اند و بک اند متفاوت هست.
ایا راه حلی هست که بشود در ادامه ادرس وب سوکت را خاص نمود و سمت ری اکت جی اس ان ادرس را ساخت برای دریافت و لیسینر نمودن وب سوکت خاص
مثلا کد هر شهر تعبیه بشه تا هر شهر فقط وب سوکت خودش را دریافت کند.
در سرچ ها راه حلی با
setHandshakeHandler
دیدم که نتونستم متوجه بشم که چطور کار می کنه.
البته من در قسمت بالا بعد از گرفتن مسیج با پارامتری که در خود مسیج تعبیه شده می تونم تغییرات رو بر روی شهر مورد نظر بدم ولی این راه حلی معقولی نیست.
پیشاپیش از راهنماییتون سپاسگذارم.

ارسال پست