Avatar
0
Tran Duy Tung Beginner
Tran Duy Tung Beginner
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&lt;String, String&gt; smartNotificationConsumerFactory() { Map&lt;String, Object&gt; props = <span class="pl-k">new</span> HashMap&lt;&gt;(); 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&lt;&gt;(props); } <span class="pl-s">@Bean</span> <span class="pl-k">public</span> ConcurrentKafkaListenerContainerFactory&lt;String, String&gt; smartNotificationKafkaListenerContainerFactory( <span class="pl-s">@Qualifier</span>(<span class="pl-s">"asyncTask"</span>) ThreadPoolTaskExecutor executor) { ConcurrentKafkaListenerContainerFactory&lt;String, String&gt; factory = <span class="pl-k">new</span> ConcurrentKafkaListenerContainerFactory&lt;&gt;(); 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>
Answer
Avatar
0
vm5j9xlxja4j0rwc Beginner
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
Answer
Avatar
0
azqhdyt4pggs7smw Beginner
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> &lt;<span class="pl-ent">applications</span>&gt; &lt;<span class="pl-ent">application</span>&gt; &lt;<span class="pl-ent">name</span>&gt;app1&lt;/<span class="pl-ent">name</span>&gt; &lt;<span class="pl-ent">folder</span>&gt;app1-app-entry&lt;/<span class="pl-ent">folder</span>&gt; &lt;<span class="pl-ent">entry-loader</span>&gt;com.abc.app1.app.AppEntryLoader&lt;/<span class="pl-ent">entry-loader</span>&gt; &lt;<span class="pl-ent">config-file</span>&gt;config/config.properties&lt;/<span class="pl-ent">config-file</span>&gt; &lt;/<span class="pl-ent">application</span>&gt; &lt;<span class="pl-ent">application</span>&gt; &lt;<span class="pl-ent">name</span>&gt;app2&lt;/<span class="pl-ent">name</span>&gt; &lt;<span class="pl-ent">folder</span>&gt;app2-app-entry&lt;/<span class="pl-ent">folder</span>&gt; &lt;<span class="pl-ent">entry-loader</span>&gt;com.abc.app2.app.AppEntryLoader&lt;/<span class="pl-ent">entry-loader</span>&gt; &lt;<span class="pl-ent">config-file</span>&gt;config/config.properties&lt;/<span class="pl-ent">config-file</span>&gt; &lt;/<span class="pl-ent">application</span>&gt; &lt;/<span class="pl-ent">applications</span>&gt; </pre> </div>is it the correct way to define?
Answer
Avatar
0
Bảo Ngô Beginner
Bảo Ngô Beginner
Ý 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?
Answer
Avatar
0
Bảo Ngô Beginner
Bảo Ngô Beginner
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>
Answer
Avatar
0
Nguyễn Hữu Cường Beginner
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>
Answer
Avatar
2
TungDP Beginner
TungDP Beginner
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 ạ?
Answer
Avatar
0
Cường Ngô Beginner
Cường Ngô Beginner
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>
Answer
Avatar
0
wuwymm20wobp2ke4 Beginner
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 ạ.
Answer
Avatar
1
Young Monkeys Beginner
Young Monkeys Beginner
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 ạ
Answer
Avatar
0
Nguyễn Hữu Cường Beginner
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 ạ
Answer
Avatar
1
Tuyen Nguyen Beginner
Tuyen Nguyen Beginner
[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>
Answer