Java for Beginner
870 subscribers
1.01K photos
275 videos
14 files
1.69K links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
История IT-технологий сегодня — 02 января


ℹ️ Кто родился в этот день

Линн Конвей (англ. Lynn Conway; 10 января 1938, Маунт-Вернон, штат Нью-Йорк, США — 9 июня 2024, Джэксон[англ.], Мичиган, США)американская компьютерная учёная, инженер-электроник, изобретательница, работала в IBM и внесла заметный вклад в создание суперскалярной архитектуры компьютеров.


🌐 Знаковые события

1959 — в СССР запущена первая автоматическая межпланетная станция «Луна-1».


#Biography #Birth_Date #Events #02Января
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1🤓1
Всем привет!

Как пережили праздники? 🌲
Все салаты уже съели? 😂

Я вот решил отдохнуть и 4 дня не трогал код. Чувствую дискомфорт... 😨

Напоминаю что у нас есть чат - https://t.me/Java_Beginner_chat, где можно и поболтать (помолчать, как делает большинство) 😄
Please open Telegram to view this post
VIEW IN TELEGRAM
🆒5
История IT-технологий сегодня — 03 января


ℹ️ Кто родился в этот день

Не нашел(


🌐 Знаковые события

1977 — произведён первый компьютер фирмы Apple.

2009 – Создатель системы, Сатоши Накамото, устанавливает первый блок блокчейна децентрализованной платежной системы Биткойн, называемый генезис-блоком.


#Biography #Birth_Date #Events #03Января
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
👍2
История IT-технологий сегодня — 04 января


ℹ️ Кто родился в этот день

Не нашел(


🌐 Знаковые события

1959 — «Луна-1» становится первым в мире космическим аппаратом, достигшим окрестностей Луны.

1975 — Эта дата вышла за пределы 12-битного поля, которое использовалось в TOPS-10. В связи с этой ошибкой возникло множество проблем и сбоев, пока разрабатывался альтернативный формат.

2004 — Марсоход «Спирит» совершил посадку на Марсе.


#Biography #Birth_Date #Events #04Января
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Не смог удержаться, взял к нам в канал)) Очень со смыслом и смешно 😂😂😂

https://t.me/Java_for_beginner_dev

#Mems
🤓11
Channel photo updated
История IT-технологий сегодня — 05 января


ℹ️ Кто родился в этот день

Стивен Коул Клин ( / ˈ k l eɪ n i / KLAY -nee ; [ a ] ​​5 января 1909 — 25 января 1994)американский математик и логик. Один из учеников Алонзо Чёрча, Клин, наряду с Розой Петер, Аланом Тьюрингом, Эмилем Постом и другими, наиболее известен как основатель раздела математической логики, известного как теория рекурсии, которая впоследствии помогла заложить основы теоретической информатики.


🌐 Знаковые события

1769 — Джеймс Уатт получает патент на свою паровую машину.

1969 – Космический зонд «Венера-5» запущен в 06:28:08 UTC с Байконура.


2005 — в Солнечной системе обнаружена карликовая планета Эрида.


#Biography #Birth_Date #Events #05Января
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Spring Boot 3.x + RabbitMQ: Продвинутая конфигурация

Введение: Современный стек для production

Spring Boot 3.x в сочетании с RabbitMQ представляет собой enterprise-уровневую платформу для построения event-driven систем. В 2025 году фокус сместился с базовой интеграции на production-готовые конфигурации, обеспечивающие безопасность, наблюдаемость и отказоустойчивость.


Spring Boot 3.3+ и RabbitMQ Starter: ключевые изменения

Spring Boot 3.3 существенно улучшил автоконфигурацию RabbitMQ:
Автоматическое определение кворумных очередей (Quorum Queues) как стандарта
Интеграция с Micrometer для детального мониторинга
Поддержка реактивных потоков через Project Reactor
Готовность к GraalVM native images из коробки

Минимальная конфигурация:
@Configuration
public class RabbitMQConfig {

@Bean
public CachingConnectionFactory connectionFactory(
@Value("${spring.rabbitmq.host}") String host) {
CachingConnectionFactory factory = new CachingConnectionFactory(host);

// Производственные настройки по умолчанию
factory.setPublisherConfirmType(CachingConnectionFactory.ConfirmType.CORRELATED);
factory.setPublisherReturns(true);
factory.setChannelCacheSize(25);

return factory;
}
}



Конфигурация для production: критичные параметры

Для production обязательны:
TLS/SSL для шифрования трафика
mTLS (Mutual TLS) для аутентификации клиентов
OAuth2 или JWT для авторизации

Конфигурация mTLS в application.yaml:
spring:
rabbitmq:
ssl:
enabled: true
algorithm: TLSv1.3
key-store: file:/etc/ssl/client-keystore.p12
key-store-password: ${KEYSTORE_PASSWORD}
key-store-type: PKCS12
trust-store: file:/etc/ssl/truststore.jks
trust-store-password: ${TRUSTSTORE_PASSWORD}
trust-store-type: JKS
verify-hostname: true


Гарантии доставки
spring:
rabbitmq:
# Подтверждения от брокера
publisher-confirm-type: correlated
publisher-returns: true

# Подтверждения от потребителя
listener:
simple:
acknowledge-mode: manual # Для полного контроля
prefetch: 10 # Балансировка нагрузки
retry:
enabled: true
max-attempts: 3
back-off:
initial-interval: 1s
multiplier: 2


Spring Boot 3.3 предоставляет расширенный мониторинг через Micrometer:

@Configuration
public class MonitoringConfig {

@Bean
public MeterRegistryCustomizer<MeterRegistry> rabbitMQMetrics() {
return registry -> {
// Кастомные метрики для RabbitMQ
registry.config().commonTags("application", "order-service");
};
}

@Bean
public RabbitTemplateMonitoring rabbitTemplateMonitoring(
RabbitTemplate rabbitTemplate,
MeterRegistry meterRegistry) {

// Мониторинг времени доставки
Timer timer = Timer.builder("rabbitmq.publish.duration")
.description("Time to publish message to RabbitMQ")
.register(meterRegistry);

rabbitTemplate.setObservationEnabled(true);

return new RabbitTemplateMonitoring(rabbitTemplate, timer);
}
}



Reactive RabbitMQ с Project Reactor

Реактивная модель идеальна для:
Высоконагруженных систем с тысячами соединений
Сценариев, требующих backpressure управления
Интеграции с другими реактивными компонентами (WebFlux, R2DBC)

#Java #middle #RabbitMQ
👍2🔥1
Конфигурация реактивного RabbitMQ:
@Configuration
@EnableReactiveRabbit
public class ReactiveRabbitConfig {

@Bean
public ReactiveRabbitTemplate reactiveRabbitTemplate(
ReactiveRabbitConnectionFactory factory) {

ReactiveRabbitTemplate template = new ReactiveRabbitTemplate(factory);

// Настройки backpressure
template.setObservationEnabled(true);
template.setUsePublisherConfirm(true);

return template;
}

@Bean
public ReactiveRabbitListenerContainerFactory containerFactory(
ReactiveRabbitConnectionFactory factory) {

ReactiveRabbitListenerContainerFactory containerFactory =
new ReactiveRabbitListenerContainerFactory();
containerFactory.setConnectionFactory(factory);

// Обработка ошибок в реактивном стиле
containerFactory.setErrorHandler(errorHandler());

return containerFactory;
}

private ReactiveErrorHandler errorHandler() {
return new ReactiveErrorHandler() {
@Override
public Mono<Void> handleError(Throwable throwable,
Acknowledgement acknowledgement) {
log.error("Reactive consumption error", throwable);
return acknowledgement.nack(false); // Не requeue при фатальных ошибках
}
};
}
}


Реактивный consumer с обработкой backpressure:
@Component
public class OrderEventConsumer {

@ReactiveRabbitListener(queues = "orders.queue")
public Mono<Void> processOrder(OrderEvent event,
Channel channel,
@Header(AmqpHeaders.DELIVERY_TAG) long tag) {

return Mono.fromCallable(() -> {
// Обработка события
return processOrderInternal(event);
})
.doOnSuccess(result -> {
// Ручное подтверждение
channel.basicAck(tag, false);
})
.doOnError(error -> {
// Логика повторной обработки
channel.basicNack(tag, false, shouldRequeue(error));
})
.then();
}
}



GraalVM native поддержка


Spring Boot 3.3 значительно улучшил поддержку GraalVM native images:

Необходимые зависимости:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aot</artifactId>
</dependency>

<dependency>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
</dependency>


Конфигурация для RabbitMQ в native-образе:
@NativeHint(
types = {
@TypeHint(types = {
com.rabbitmq.client.impl.AMQConnection.class,
com.rabbitmq.client.impl.recovery.AutorecoveringConnection.class,
// Критичные классы для RabbitMQ клиента
})
},
initialization = {
@InitializationHint(
types = com.rabbitmq.client.impl.AMQConnection.class,
initTime = InitializationTime.BUILD
)
}
)
@Configuration
public class RabbitMQNativeConfig {

// Явное объявление бинов, необходимых в runtime
@Bean
@RuntimeHint
public ConnectionFactory connectionFactory() {
// Фабрика должна создаваться с явными типами
return new CachingConnectionFactory();
}
}


Проблемы и решения для native-сборок:
Reflection: RabbitMQ клиент использует reflection для создания соединений
Динамическая загрузка классов: Требует явного конфигурирования в native-image
Сетевые операции: Нативный образ требует явного разрешения сетевых операций


#Java #middle #RabbitMQ
👍3🔥1