بک اند : اسپرینگ بوت
فرانت اند : ری اکت جی اس
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);
}
کد: انتخاب همه
@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
دیدم که نتونستم متوجه بشم که چطور کار می کنه.
البته من در قسمت بالا بعد از گرفتن مسیج با پارامتری که در خود مسیج تعبیه شده می تونم تغییرات رو بر روی شهر مورد نظر بدم ولی این راه حلی معقولی نیست.
پیشاپیش از راهنماییتون سپاسگذارم.