#kubernetes #microservices #kubernetes-ingress #nginx-ingress
Вопрос:
Я нахожусь на win 10 home и использую docker toolbox с мини-кубом. Это приложение основано на архитектуре микросервисов, поэтому в нем много файлов, но ниже приведены файлы, которые я считаю неисправными. Тем не менее, все приложение работает, сообщения отображаются при обновлении, но комментарии не появляются. Я не использую никакой базы данных. Все данные сохраняются в памяти.
Это начало происходить после инициализации ingress-nginx в приложении
Ожидаемое Поведение:
- добавляйте сообщения и обновляйте страницу, чтобы увидеть новые сообщения
- добавляйте комментарии к сообщениям и обновляйте их, чтобы увидеть новые комментарии
Шаги:
1. В интерфейсе/commentCreate.jsx
const onSubmit = async (event) => {
event.preventDefault();
await axios.post(`http://posts.com/posts/${postId}/comments/create`, {
content,
});
setContent("");
};
2. В comments/index.js
app.post('/posts/:id/comments/create', async (req, res) => {
...
commentsByPost[req.params.id] = comments
await axios.post('http://event-bus-int-serv:5000/events',{
type: 'CommentCreated',
data: {
id: commentId,
content,
postId: req.params.id,
status: 'pending'
}
})
res.status(201).json(comments)
})
3. В event-bus/index.js
app.post('/events', (req,res) => {
...
axios.post('http://posts-int-serv:4000/events', event).catch(err => console.log(err.message))
axios.post('http://comments-int-serv:4100/events', event).catch(err => console.log(err.message))
axios.post('http://query-int-serv:4200/events', event).catch(err => console.log(err.message))
axios.post('http://moderation-int-serv:4300/events', event).catch(err => console.log(err.message))
res.send({status: 'OK'})
})
4. В query/index.js
const posts={}
const handleEvent = (type, data) => {
...
if(type==="CommentCreated"){
const {id,content,postId, status} = data
const post = posts[postId]
post.comments.push({
id, content, status
})
console.log("post",post)
}
}
app.get('/posts', (req,res) => {
console.log("posts query get: ",posts)
res.send(posts)
})
app.post('/events', (req,res) => {
const {type, data} = req.body
handleEvent(type, data)
res.send({})
})
Возможная корневая проблема:
Console.log(«сообщение»,сообщение) в созданном блоке комментариев показывает все сообщения вместе с комментариями, но,похоже, app.get(‘/сообщения’, (req, res) не работает, так как его журнал консоли не отображается
Я проверил маршрутизацию на входе и думаю, что это правильно. Чтобы связаться с app.get(‘/posts’, (req,res), мне нужно использовать порт 4200, который является номером порта, который я дал для службы запросов
Часть конфигурации yml службы входа
- path: /posts
pathType: Prefix
backend:
service:
name: query-serv
port:
number: 4200
Для дальнейшего ознакомления, это весь код в моем репо :
https://github.com/JohnLawliet/microservices
Мы будем очень признательны за любую помощь.
Комментарии:
1. Я проверил вход, выглядит хорошо. По крайней мере, для путей, которые у него есть. Есть ли что-нибудь в
developer tools
-> >network
? Обычно он показывает, к чему он не может подключиться.