Size: a a a

2020 May 10

A

Arius in Java & Co
Мне не особо зашёл курс от skillbox, но это было год назад, может сейчас что то изменилось.
источник

AU

Alex Undefined in Java & Co
Роман Нагаев
всем привет, есть вопрос по многопотоку

в последовательном коде методы компонентов принимают данные и возвращают даные (параметры и возвращаемое значение) и это хорошо, такой апи остаётся прозрачным и не накладывает ограничений области видимости данных, помимо тех которые создаёт сам разработчик выстраивая абстракцию. я долгое время писал такой код и не испытывал проблем

когда же я начал писать конкурентный (и/или многопоточный) код, возвращать только данные стало недостаточно, теперь помимо данных, требуется возвращать их "положение во времени и пространстве" - CompletableFuture, асинхронные апи принимают данные но возвращают уже данные во фьюче, и такой метод принуждает тот метод который его вызывал тоже вернуть назад фьючу, либо заблокировать поток чтобы от неё избавиться. тем самым фьюча проникает в контракт метода и растекается по всему апи а мне это не нравится, можно как-нибудь отделить мою бизнес логику от логики конкурентности? или может быть не стоит даже пытаться?
Можно последние звенья писать синхронными, например, вызов стороннего реста, а вот на более высоком уровне это оборачивать в фичи/реакт/стримы. Нужно смотреть, что апи должно возвращать, если результат нужен вот прямо сейчас, то без промис-обёрток не получится сделать(без велосипедов), имхо
источник

AA

Alexey Astashenko in Java & Co
Alex Undefined
Можно последние звенья писать синхронными, например, вызов стороннего реста, а вот на более высоком уровне это оборачивать в фичи/реакт/стримы. Нужно смотреть, что апи должно возвращать, если результат нужен вот прямо сейчас, то без промис-обёрток не получится сделать(без велосипедов), имхо
тогда, поидее, и смысла нет особого в асинхронщине, если последнее звено блокирующее
источник

РН

Роман Нагаев... in Java & Co
Alex Undefined
Можно последние звенья писать синхронными, например, вызов стороннего реста, а вот на более высоком уровне это оборачивать в фичи/реакт/стримы. Нужно смотреть, что апи должно возвращать, если результат нужен вот прямо сейчас, то без промис-обёрток не получится сделать(без велосипедов), имхо
я хочу отвязать все слои, и при этом не начать блокировать

что-то типа async в js или suspending function в котлине
источник

БС

Богдан Суконнов... in Java & Co
Роман Нагаев
я хочу отвязать все слои, и при этом не начать блокировать

что-то типа async в js или suspending function в котлине
Может в реактивщину глянуть тогда уж? А то на один запрос еще несколько тредов появится, еще хуже для масштабирования.
источник

РН

Роман Нагаев... in Java & Co
Богдан Суконнов
Может в реактивщину глянуть тогда уж? А то на один запрос еще несколько тредов появится, еще хуже для масштабирования.
реактивщина не решит эту проблему(
просто я буду возвращать не CompletableFuture а Mono
источник

VK

Vitaliy Kostetskiy in Java & Co
Молодые люди
Необходимо прикрутить вебсокеты к спрингу, встроенные вещи в спринг типа sockjs не подходят
Т.к. на клиенте будет использоваться socket io
Я создал сервлет, прописал роутинг
Обрабатываю engineIoServer.handleRequest(request, response);
Но все валится, начал рыться в исходниках, а этот метод для полинга а не вебсокетов
Есть же второй метод для хендлинга handleWebSocket
Но он требует своей имплементации EngineIoWebSocket
Как я могу завернуть все этот как на ноде сделано, что бы и полинг был и сокеты
А самое главное, зачем сделана абстрактная работа с сокетом, если протокол то один и тот же?
источник

AU

Alex Undefined in Java & Co
Роман Нагаев
реактивщина не решит эту проблему(
просто я буду возвращать не CompletableFuture а Mono
Хорошо бы прояснить, откуда и куда возвращаются данные? По разным слоям или на одном слое, но между разными объектами?
источник

MG

Max Grigoriev in Java & Co
Роман Нагаев
реактивщина не решит эту проблему(
просто я буду возвращать не CompletableFuture а Mono
А чем Моно плохо? В ЖС ты бы возвращал промис но это ок?
источник

РН

Роман Нагаев... in Java & Co
Alex Undefined
Хорошо бы прояснить, откуда и куда возвращаются данные? По разным слоям или на одном слое, но между разными объектами?
и так и так

я пытаюсь сделать etl через eip на минималках с её шагами, пайпами, сплиттерами, агрегаторами итд, но репозитории через которые мне нужно ходить в базу асинхронные, из-за этого на уровне пайплайна у меня всплывает куча фьюч с каждого шага, данные из которых передаются в следующие шаги, объединяются и делятся, и вот на этом месте всё сыпется
источник

РН

Роман Нагаев... in Java & Co
Max Grigoriev
А чем Моно плохо? В ЖС ты бы возвращал промис но это ок?
в жс я бы делал async await и явно бы не использовал промисы
источник

MG

Max Grigoriev in Java & Co
Роман Нагаев
в жс я бы делал async await и явно бы не использовал промисы
ну так ты бы явно обявлял бы все функции в цепочке вызовов как async/await и когда надо то собирал бы сам промис и возвращал его. те все тоже самое.
источник

РН

Роман Нагаев... in Java & Co
Max Grigoriev
ну так ты бы явно обявлял бы все функции в цепочке вызовов как async/await и когда надо то собирал бы сам промис и возвращал его. те все тоже самое.
да но без коллбеков или джоинов на каждом уровне, внутри этой иерархии
источник

MG

Max Grigoriev in Java & Co
Роман Нагаев
да но без коллбеков или джоинов на каждом уровне, внутри этой иерархии
поэтому и предлагают Mono/Flux где будешь делать flatMap, нет в джаве сахара для асинхронщины. жди project loom
источник

MG

Max Grigoriev in Java & Co
да и в ЖС надо понимать что ты делаешь с асинк/авейт - а то будет в цикле запуск и ожидание по одному
источник

RK

Roman K in Java & Co
Cyclone
А в чём разница? Если просто не задавать jvm ключи?
Если у тебя проперти-файл это часть образа, то ты не сможешь его изменить без пересборки образа. А если настройки читаются из env vars - то можно просто образ перезапустить с другими параметрами
12 factor apps рекомендуют как раз переменные окружения использовать
источник

РН

Роман Нагаев... in Java & Co
Max Grigoriev
поэтому и предлагают Mono/Flux где будешь делать flatMap, нет в джаве сахара для асинхронщины. жди project loom
не понимаю, как это мне поможет принцип ведь тот же?
просто вместо CompletableFuture.thenCompose будет Mono.flatMap?

ps. реактивщиной я раньше не занимался
источник

MG

Max Grigoriev in Java & Co
Роман Нагаев
не понимаю, как это мне поможет принцип ведь тот же?
просто вместо CompletableFuture.thenCompose будет Mono.flatMap?

ps. реактивщиной я раньше не занимался
ну не может у тебя асинхронный код и чтобы результат функции был POJO. нигде этого нет ни в джаве ни в жс ни в расте и тд - всегда возращается нечто, что когда то может вернуть результат.  где то может быть сахар чтобы облегчить как это выглядит но что под капотом будет одинаково
источник

S

Sergey in Java & Co
По какой причине при запуске из Ii все ок а когда в jar собираю падает с ошибкой:


SEVERE: [Channel<1>: (firestore.googleapis.com:443)] Uncaught exception in the SynchronizationContext. Panic!
java.lang.IllegalStateException: Could not find policy 'pick_first'. Make sure its implementation is either registered to LoadBalancerRegistry or included in META-INF/services/io.grpc.LoadBalancerProvider from your jar files.
       at io.grpc.internal.AutoConfiguredLoadBalancerFactory$AutoConfiguredLoadBalancer.<init>(AutoConfiguredLoadBalancerFactory.java:97)
       at io.grpc.internal.AutoConfiguredLoadBalancerFactory.newLoadBalancer(AutoConfiguredLoadBalancerFactory.java:67)


?
источник

РН

Роман Нагаев... in Java & Co
да я понимаю, что асинхронность никуда не денется и я знаю что сахара типа async/await в джаве нет

но в тоже время я сталкиваюсь с проблемами которые мне мешают, вплоть до того что у меня абстракция сыпется
1) коллбек хелл
2) необходимость использовать CompletableFuture в методах находящихся выше в стеке вызовов и соответственно агрегировать фьючи если нужно
3) привязка к CompletableFuture в контрактах бинов

вот и пытаюсь выяснить, может есть способ получше или все также как и я коллбеки фигачат
источник