Cấu hình Async và Cluster cho Kafka
Em chào anh ạ. <p>
Hiện tại em đang làm 1 project kết nối giữa kafka và mongodb, em đang thực hiện như sau:
</p>
<ol start="1">
<li>, application.yml</li>
</ol>
<div class="markdown-block position-relative overflow-auto source-java">
<pre>
spring:
mongo:
enabled: false
hosts:
- host: 192.168.101.43
port: 27017
username: chatbot
password: chatbot@vtcc
authSource: chatbot_platform
kafka:
bootstrap:
servers: 192.168.101.43:9092, 192.168.101.69:9092
topic:
name: notification
orderName: order
topic-json:
name: notification
orderName: order
consumer:
group: myGroup
orderGroup: orderGroup
username: kafka
password: 123456aA@
</pre>
</div>2., AsyncConfig<div class="markdown-block position-relative overflow-auto source-java">
<pre>
<span class="pl-s">@Configuration</span>
<span class="pl-k">public</span> <span class="pl-k">class</span> AsyncConfig {
<span class="pl-s">@Bean</span>(name = <span class="pl-s">"asyncTask"</span>)
<span class="pl-k">public</span> ThreadPoolTaskExecutor asyncTask() {
ThreadPoolTaskExecutor executor = <span class="pl-k">new</span> ThreadPoolTaskExecutor();
executor.setCorePoolSize(10); // Số lượng luồng cố định
executor.setMaxPoolSize(50); // Số lượng luồng tối đa
executor.setQueueCapacity(100); // Số lượng tác vụ chờ trong hàng đợi
executor.setThreadNamePrefix(<span class="pl-s">"asyncTask-"</span>);
executor.setKeepAliveSeconds(60);
executor.initialize();
<span class="pl-k">return</span> executor;
}
<span class="pl-s">@Bean</span>
<span class="pl-k">public</span> ExecutorService asyncExecutor() {
<span class="pl-k">return</span> Executors.newCachedThreadPool();
}
}
</pre>
</div>3., Kafka config<div class="markdown-block position-relative overflow-auto source-java">
<pre>
<span class="pl-s">@EnableKafka</span>
<span class="pl-s">@Configuration</span>
<span class="pl-k">public</span> <span class="pl-k">class</span> KafkaConsumerConfig {
<span class="pl-s">@Value</span>(<span class="pl-s">"${spring.kafka.bootstrap.servers}"</span>)
private String bootstrapAddress;
<span class="pl-s">@Value</span>(<span class="pl-s">"${spring.kafka.consumer.group}"</span>)
private String consumerGroup;
<span class="pl-s">@Value</span>(<span class="pl-s">"${spring.kafka.consumer.orderGroup}"</span>)
private String orderGroup;
<span class="pl-s">@Value</span>(<span class="pl-s">"${spring.kafka.username}"</span>)
private String username;
<span class="pl-s">@Value</span>(<span class="pl-s">"${spring.kafka.password}"</span>)
private String password;
<span class="pl-s">@Bean</span>
<span class="pl-k">public</span> ConsumerFactory<String, String> smartNotificationConsumerFactory() {
Map<String, Object> props = <span class="pl-k">new</span> HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress);
props.put(ConsumerConfig.GROUP_ID_CONFIG, orderGroup);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, <span class="pl-s">"30000"</span>);
<span class="pl-k">if</span> (username != null && password != null) {
props.put(<span class="pl-s">"security.protocol"</span>, <span class="pl-s">"SASL_PLAINTEXT"</span>);
props.put(<span class="pl-s">"sasl.mechanism"</span>, <span class="pl-s">"PLAIN"</span>);
props.put(<span class="pl-s">"sasl.jaas.config"</span>, "org.apache.kafka.common.security.plain.PlainLoginModule required username="" + username + <span class="pl-s">""</span> password="" + password + <span class="pl-s">"";"</span>);
}
<span class="pl-k">return</span> <span class="pl-k">new</span> DefaultKafkaConsumerFactory<>(props);
}
<span class="pl-s">@Bean</span>
<span class="pl-k">public</span> ConcurrentKafkaListenerContainerFactory<String, String> smartNotificationKafkaListenerContainerFactory(
<span class="pl-s">@Qualifier</span>(<span class="pl-s">"asyncTask"</span>) ThreadPoolTaskExecutor executor) {
ConcurrentKafkaListenerContainerFactory<String, String> factory =
<span class="pl-k">new</span> ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(smartNotificationConsumerFactory());
factory.setConcurrency(3);
<span class="pl-k">return</span> factory;
}
}
</pre>
</div>Vì là lần đầu tiên làm nên em không rõ là với những cấu hình trên thì đã đáp ứng được async và kết nối theo cụm cluster đến kafka chưa ạ. Và làm cách nào để có thể kiểm tra đưọc ạ.<p>
Em cảm ơn anh!
</p>
Tìm kiếm không phân biệt hoa thường, không phân biệt dấu trong Spring Data MongoDB
Với sql em set lại collate để tìm kiếm không phân biệt hoa thường, không phân biệt dấu.<p>
Sau khi chuyển sang mongodb, em không biết làm cách nào để tìm kiếm giống sql
</p>
Maven - Dependency
Em chào anh ạ. Anh cho em hỏi, em đang có 1 project em chia thành các module nhỏ trong đó có module "common" em dùng mongo-java-driver<div class="markdown-block position-relative overflow-auto source-java">
<pre>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>${mongodb.version}</version>
</dependency>
</pre>
</div>Bây giờ ở 1 module mới em muốn dùng sang Mongo của Spring mà vẫn muốn dùng các config của common<div class="markdown-block position-relative overflow-auto source-java">
<pre>
<dependency>
<groupId>com.example.common</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</pre>
</div>Vì tính chất không thể thay đổi ở common, vậy có cách nào có thể dùng Mongo của Spring ở module mới mà không bị conflix thư viện với mongo ở module "common" không ạ.<p>
Em cảm ơn ạ
</p>
Spring khởi tạo Servlet/ Server Port như thế nào
Em chào anh, anh cho em hỏi em đang sử dụng Spring MVC. Em muốn hiểu được Servlet và Server Port khi chạy ứng dụng sẽ được khởi tạo như thế nào. Anh có thể giải thích giúp em được không ạ. Em cảm ơn ạ
Spring: singleton có ý nghĩa gì và tại sao lại phải tạo singleton?
Em chào anh.<p>
Em mới mua sách "Làm chủ các mẫu thiết kế kinh điển trong lập trình" của anh. Em thấy ngay phần đầu tiên anh có đề cập đến singleton. Em mới chuyển ngành sang làm dev có một câu hỏi mong anh có thế giải thích ạ.
</p>
<p>
Trong Spring Boot singleton được tạo ra nếu đánh dấu nó là 1 bean, vậy singleton có ý nghĩa gì và tại sao lại phải tạo singleton. Để hiểu cách nó tạo ra thì làm như thế nào được ạ?
</p>
Hướng phát triển
Spring(nên biết thêm những gì), những công nghệ cần biết khi làm việc với spring,...
hỏi về Aeron thay cho UDP
e chào a, lâu r em k nc với anh vì em bận cv cá nhân quá trời <p>
cho em hỏi a từng tìm hiểu aeron chưa ạ, liệu nó có ổn hơn socket k ạ, cái này nó na ná với UDP, tức là cần tốc độ còn mất data cũng được anh ạ, dùng để lám livestream hoặc game online, k làm chat realtime đc vì nó mất msg
</p>
Quản lí log của nhiều service
em chào anh.<p>
Em có câu hỏi là trong microservice làm sao để quản lí log của nhiều service cùng lúc ạ.
</p>
<p>
Bình thường là khi 1 service bị lỗi là phải mò vào tìm file log của service đó để kiểm tra đọc log. vậy có thư viện hay tool nào có thể quản lí log của nhiều service k ạ
</p>
lỗi khi tạo project spring boot
e tạo project spring boot gặp lỗi này, mn xem giúp e vs ạ
<img src="/api/v1/media/a70f0381708ce5660eabb6a015b1a72b4d1c31c26e6d9b0a35747f053e4ae985.png" alt="loi.PNG">
Mapping request form Json to Xml
Em chào anh.<p>
Trong Java mình có thể sử lí mapping request json -> xml để gọi đến 1 service public api dạng soap như thế nào ạ
</p>
<img src="/api/v1/media/a0c786b3451f2c28bb9317f326e2694e88744819bac78a3dfad57120cc7f8fe4.png" alt="req.png">
<img src="/api/v1/media/c5b5b92a92cb1c5d64c1b0b751e84e37297a9bb52bd31b0f36e8c2e91ee9b97a.png" alt="Annotation 2023-08-04 124459.png">
Có nhất thiết dùng swagger
Theo a có nhất thiết dùng swagger thay cho viết document bằng words k ạ
[Duplicated]thread và connection
Có thể trc đây em hiểu sai : 1 thread = 1 request. response còn 1 connection là 1 cái kết nối với DB phải không ạ. Vậy 1connection có thể có nhiều thread cùng connect