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>
Cho em hỏi về api document của viettel post ạ
Cho em hỏi về api document của viettel post ạ, quy trình lấy token như thế nào ạ. Em cảm ơn
Multiple application inside applications tag in zone settings xml
How to create multiple application within applications tag? <div class="markdown-block position-relative overflow-auto source-xml">
<pre>
<<span class="pl-ent">applications</span>>
<<span class="pl-ent">application</span>>
<<span class="pl-ent">name</span>>app1</<span class="pl-ent">name</span>>
<<span class="pl-ent">folder</span>>app1-app-entry</<span class="pl-ent">folder</span>>
<<span class="pl-ent">entry-loader</span>>com.abc.app1.app.AppEntryLoader</<span class="pl-ent">entry-loader</span>>
<<span class="pl-ent">config-file</span>>config/config.properties</<span class="pl-ent">config-file</span>>
</<span class="pl-ent">application</span>>
<<span class="pl-ent">application</span>>
<<span class="pl-ent">name</span>>app2</<span class="pl-ent">name</span>>
<<span class="pl-ent">folder</span>>app2-app-entry</<span class="pl-ent">folder</span>>
<<span class="pl-ent">entry-loader</span>>com.abc.app2.app.AppEntryLoader</<span class="pl-ent">entry-loader</span>>
<<span class="pl-ent">config-file</span>>config/config.properties</<span class="pl-ent">config-file</span>>
</<span class="pl-ent">application</span>>
</<span class="pl-ent">applications</span>>
</pre>
</div>is it the correct way to define?
Ý nghĩa 1 số annotation trong ezyfox library
Hi a, e thấy có annotation này @EzyObjectBinding(write = false). E muốn hỏi mục đích của nó là gì và read, write = false vs true khác nhau ntn. Với lại a có document nào liệt kê các annotation thường dùng ko?
Bàn về cách ezy trả response
@Override<p>
protected void execute() throws EzyBadRequestException {
</p>
<p>
if (message.length() > 255) {
</p>
<p>
throw new EzyBadRequestException(ChatErrors.MESSAGE_TOO_LONG, "message too long");
</p>
<p>
}
</p>
<p>
ChatChannelUsers channelUsers =
</p>
<p>
channelUserService.getChannelUsers(channelId, user.getName());
</p>
<p>
if (channelUsers == null) {
</p>
<p>
throw new EzyBadRequestException(ChatErrors.CHANNEL_NOT_FOUND, "channel with id: " + channelId + " not found");
</p>
<p>
}
</p>
<p>
messageService.save(new ChatMessage(
</p>
<p>
maxIdService.incrementAndGet(ChatEntities.CHAT_MESSAGE),
</p>
<p>
true, message, channelId, user.getName(), clientMessageId
</p>
<p>
));
</p>
<p>
responseFactory.newObjectResponse()
</p>
<p>
.command(CHAT_USER_MESSAGE)
</p>
<p>
.param("from", user.getName())
</p>
<p>
.param("message", message)
</p>
<p>
.param("channelId", channelId)
</p>
<p>
.usernames(channelUsers.getUsers())
</p>
<p>
.execute();
</p>
<p>
}
</p>
<p>
Đoạn code trên xử lý request và gửi response cho user. Tuy nhiên e có thắc mắc là tại sao mình ko thiết kế để return 1 cái response entity (ví dụ bên spring) hoặc 1 dto màcác lại return void và để việc response cho developer?
</p>
<p>
Nếu như e có 1 concurrent map/list để cache user lại và sau đó bốc bừa 1 vài user ra để gửi thì sẽ có vấn đề không?
</p>
<p>
Tệ hơn nữa, nếu e cache lại responseFactory và dùng nó cùng với list user để spam message thì có ổn không?
</p>
<p>
Regards
</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>
Cách nhúng đối tượng tương tự như @Autowired của Spring boot?
<em>Đặt vấn đề:</em>
Lúc đọc cuốn "Những Nguyên Tắc Sống Còn Trong Lập Trình" của anh Tạ Văn Dũng, em có khá ấn tượng về cách anh giải thích về ý tưởng Inversion-of-control. Sau đó, em cũng vọc vạch làm thử 1 cái tương tự, đại ý là em làm như này:
<ul>
<li>Bước 1: Dùng Reflection quét package của file Main để tìm ra toàn bộ các class được khai báo trong package, đưa vào 1 HashSet.</li>
<li>Bước 2: Tạo annotation @Instance, chạy vòng lặp: những class nào có đánh dấu @Instance thì khởi tạo instance cho nó, lưu vào 1 HashMap<Class<?>, Object>.</li>
<li>Bước 3: Tạo annotation @Inject, và tiếp tục lặp qua HashMap ở bước 2, nếu instance nào mà có các field được đánh dấu @Inject thì gắn object đã được tạo trong HashMap(bước 2) vào field đó.</li></ul>
<em>Khó khăn:</em>
Nhưng em gặp vấn đề khó khi @Inject được đánh dấu vào field mà user lại sử dụng interface chứ không phải trực tiếp class.
<img src="/api/v1/media/cd1910f38bf831716e6e1968e01cbfaa484f3b5b6e9846d940157d2fd6e5cdd1.png" alt="2024-02-17_15-22.png">
<em>Câu hỏi:</em>
Lúc này làm sao để có thể tìm được tất cả các class implements interface đó và chọn ra được class phù hợp để inject vào ạ?
Responsive trong kotlin
<img src="/api/v1/media/0e988550c8c46e11c3abc75c07f37dd1a21afcaf5cd4ac55afb6025a9c71ae37.jpg" alt="Messenger_creation_d78ec69d-da4d-43f1-ae4e-7ec6f7d8893b.jpeg">
<img src="/api/v1/media/4e60eafd8f5410975528dd1e9b5cbadcbcb00f0cfcb4ad778dd3379818c646ec.jpg" alt="Messenger_creation_3c513bf1-a2d1-4c25-a6b7-4e8006e3b899.jpeg">
<p>
Mọi người cho e hỏi e đã chỉnh sdp và ddp rồi. E test trên mọi máy thì nó hiển thị ok, nhưng khi mà e tăng font size trên máy thì nó sẽ bị chèn chữ, có cách nào khắc phục không ạ. E cảm ơn.
</p>
Yêu cầu phần cứng
Mọi người cho em hỏi làm thế nào để mình xác định được các yêu cầu phần cứng của một hệ thống ạ. Có tài liệu nào liên quan mọi người có thể share cho em với ạ.
Xử lý anotation như kiểu @UserId nằm ở đâu
anh ơi em hỏi chút, cái đoạn mà a sử dụng anotation như kiểu @UserId, thì đoạn xử lý cho các thông tin của thằng userID này ở đâu anh nhỉ, em muốn xem xử lý của nó thì xem ở đâu ạ
Cuộn trang lên trên giống message với antd
E sử dụng <a href="https://ant.design/components/list " target="_blank">https://ant.design/components/list </a> . Làm cách nào để cuộn trang lên trên giống message ạ
[Mysql] Migrate table production
Chào anh Dũng và mọi người
<ul>
<li>Hiện tại em đang làm task migrate 1 table trên môi trường thật , dữ liệu bảng đấy khá lớn . Em có tìm hiểu được solution (<a href="https://dba.stackexchange.com/questions/24116/mysql-perform-a-big-data-migration-between-tables). " target="_blank">https://dba.stackexchange.com/questions/24116/mysql-perform-a-big-data-migration-between-tables). </a> Em đang định viết command để thực hiện việc đó , do đây là lần đầu em thực hiện migrate nên muốn nhờ anh tư vấn để hạn chế rủi ro về thất thoát dữ liệu.</li></ul>
<p>
Database: Mysql
</p>
<p>
Framework: Laravel
</p>