TopDev
Sort by
1 results
HIGHLIGHT COMPANY

COMPANY INFORMATION

job-imageCông Ty Cổ Phần Giải Pháp Và Công Nghệ VietnixDịch vụ Hosting - VPS tốc độ cao
Thành phố Hồ Chí Minh 25-99

RELATED POSTS

Marketplace Illustration
So sánh Apache Kafka và RabbitMQ: Nên chọn message queue nào?

Trong thế giới phát triển phần mềm hiện đại, việc xử lý và truyền tải dữ liệu hiệu quả giữa các hệ thống đã trở thành một yêu cầu quan trọng. Apache Kafka và RabbitMQ là hai nền tảng message broker hàng đầu, mỗi hệ thống đều có những ưu điểm riêng và phù hợp với các tình huống sử dụng khác nhau. Bài viết này sẽ đi sâu vào phân tích, so sánh Apache Kafka và RabbitMQ, giúp các nhà phát triển và kiến trúc sư hệ thống có cái nhìn tổng quan để lựa chọn công cụ phù hợp nhất cho dự án của mình. Tổng quan về Apache Kafka Apache Kafka là gì? Apache Kafka là một nền tảng xử lý dòng dữ liệu phân tán, mã nguồn mở, được phát triển ban đầu bởi LinkedIn và sau đó trở thành một dự án của Apache Software Foundation. Kafka được thiết kế để xử lý dữ liệu theo thời gian thực, với khả năng thu thập, lưu trữ và [...]

Marketplace Illustration
Cài đặt RabbitMQ

Bài viết được sự cho phép của tác giả Giang Phan Trong bài này, tôi sẽ hướng dẫn các bạn cách cài đặt RabbitMQ Server. Có nhiều cách cài đặt, có thể sử dụng stanalone file, sử dụng package manager/ installer hay Docker. [irp posts="35468" name="Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud"] [irp posts="43474" name="Giới thiệu RabbitMQ Management Interface"] Cài đặt RabbitMQ Server sử dụng Package manager Cài đặt Erlang Vì RabbitMQ được viết sử dụng ngôn ngữ Erlang nên để cài đặt nó các bạn cần cài đặt Erlang trước. Với MacOS, không cần phải cài đặt Erlang bởi vì Homebrew cài đặt RabbitMQ đã bao gồm Erlang runtime dependency. Cài đặt RabbitMQ trên MacOS Đầu tiên, các bạn hãy download phiên bản mới nhất của RabbitMQ tại địa chỉ: https://www.rabbitmq.com/download.html. Nó có nhiều phiên bản cho nhiều môi trường khác nhau nhưng trong bài viết này, hãy lựa chọn phiên bản phù hợp với hệ điều hành của các bạn. Ở đâ [...]

Marketplace Illustration
Giới thiệu RabbitMQ Management Interface

Bài viết được sự cho phép của tác giả Giang Phan RabbitMQ Management là một giao diện thân thiện với người dùng cho phép chúng ta giám sát và xử lý RabbitMQ Server của mình từ trình duyệt web. Có thể quản lý queue, connection, channel, exchange, users and user permission. Có thể được xử lý: tạo, xóa và xem trong trình duyệt. Có thể theo dõi tốc độ tin nhắn và gửi / nhận tin nhắn theo cách thủ công. Trong bài viết này tôi sẽ giới thiệu về giao diện của phần mềm RabbitMQ Management Interface, chi tiết nhất về các chế độ xem khác nhau mà chúng ta có thể tìm thấy trong RabbitMQ Management. Truy cập RabbitMQ Management Ở bài viết trước tôi đã hướng dẫn các bạn Cài đặt RabbitMQ và cách start RabbitMQ Server. Sau khi khởi động RabbitMQ, chúng ta có thể theo dõi và quản lý RabbitMQ từ giao diện web ở cổng 15672. Các bạn có thể truy cập vào trang này bằng URL sau: http://localhost:15672/ với username và password là guest/guest. [...]

Marketplace Illustration
Kết nối AMQP Client với RabbitMQ Server

Bài viết được sự cho phép của tác giả Giang Phan Ở các bài viết trước chúng ta đã cùng tìm hiểu về một số khái niệm cơ bản của RabbitMQ và cách cài đặt RabbmitMQ Server. Trong bài này, chúng ta sẽ cùng tìm hiểu cách tạo RabbitMQ Client (Producer và Consumer) sử dụng AMQP library để kết nối đến RabbitMQ server, đồng thời cũng giới thiệu với các bạn cách hoạt động của Default Exchange trong RabbitMQ. [irp posts="35468" name="Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud"] [irp posts="37214" name="Kết nối RabbitMQ sử dụng Web STOMP Plugin"] Tạo RabbitMQ project Tạo maven project và mở file pom.xml, khai báo dependency như sau: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>     <groupId>com.gpcoder</groupId>     <artifactId>rabbitmq-example</artifactId>     <version>1.0-SNAPSHOT</version>     <properties>         <java.version>1.8</java.version>         <maven.compiler.target>1.8</maven.compiler.target>         & [...]

Marketplace Illustration
Work Queues trong RabbitMQ

Bài viết được sự cho phép của tác giả Giang Phan Trong bài viết trước, chúng ta đã cùng tìm hiểu về cách tạo RabbitMQ Client (Producer và Consumer) sử dụng AMQP library để kết nối đến RabbitMQ server. Trong bài này, chúng ta sẽ cùng tìm hiểu chi tiết hơn về Work Queues được sử dụng để phân phối các task đến nhiều Worker. [irp posts="35468" name="Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud"] [irp posts="6447" name="RabbitMQ là gì? Tìm hiểu và sử dụng RabbitMQ"] Work Queues Ý tưởng chính của Work Queues (còn gọi là Task Queues) là tránh thực hiện một nhiệm vụ (work/task) tốn nhiều tài nguyên ngay lập tức và phải chờ nó hoàn thành. Thay vào đó chúng ta sẽ lên lịch (schedule) và các nhiệm vụ sẽ được thực hiện sau. Chúng ta gói gọn (encapsulate) một task dưới dạng Message và gửi nó đến Queue. Một tiến trình worker chạy background sẽ lấy các task và cuối cùng thực thi chúng. Có thể [...]

Marketplace Illustration
Sử dụng Fanout Exchange trong RabbitMQ

Bài viết được sự cho phép của tác giả Giang Phan Trong các bài viết trước, chúng ta đã cùng tìm hiểu về Direct Exchange. Trong bài này, tôi sẽ giới thiệu với các bạn một loại exchange khác là Fanout Exchange. [irp posts="6447" name="RabbitMQ là gì? Tìm hiểu và sử dụng RabbitMQ"] [irp posts="37562" name="Sử dụng binding Exchange to Exchange trong RabbitMQ"] Flow của một Message trong Fanout Exchange Fanout exchange (định tuyến broadcast – amq.fanout) định tuyến message (copy message) tới tất cả queue mà nó được bind, với bất kể một routing key nào. Giả sử, nếu nó N queue được bind bởi một Fanout exchange, khi một message mới published, exchange sẽ định tuyến message đó tới tất cả N queues. Fanout exchange được sử dụng cho định tuyến message broadcast (quảng bá). Flow của một Message trong Fanout Exchange như sau: Một Producer sẽ tạo một Message và publish tới Exchange. Một hoặc nhiều Queue bind tới Fanout Exchange không cần thông tin routing key. Một Message tới Exchange sẽ được chuyển tiếp đến tất cả các [...]

Marketplace Illustration
Sử dụng Direct Exchange trong RabbitMQ

Bài viết được sự cho phép của tác giả Giang Phan Trong các bài viết trước chúng ta đã tìm hiểu về Default Exchange, cách tạo Work Queue với RabbitMQ. Trong bài này, chúng ta sẽ cùng tìm hiểu về Direct Exchange trong RabbitMQ. [irp posts="35468" name="Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud"] [irp posts="37214" name="Kết nối RabbitMQ sử dụng Web STOMP Plugin"] Flow của một Message trong Direct Exchange Direct Exchange (trao đổi trực tiếp – amq.direct) định tuyến message đến Queue dựa vào routing key. Một Exchange không xác định tên (empty String), đây là loại Default Exchange, một dạng đặc biệt của là Direct Exchange. Default Exchange được liên kết ngầm định với mọi Queue với khóa định tuyến bằng với tên Queue. Flow của một Message trong Direct Exchange như sau: Một Producer sẽ tạo một Message và publish tới Exchange. Một Queue sẽ binding tới Exchange sử dụng routing key. Chúng ta có thể tạo nhiều Queue và binding tới Exchange, có thể sử dụng cùng routing key, hoặc các routing [...]

Marketplace Illustration
Sử dụng Headers Exchange trong RabbitMQ

Bài viết được sự cho phép của tác giả Giang Phan  Trong các bài viết trước, chúng ta đã cùng tìm hiểu về Direct Exchange, Fanout Exchange và Topic Exchange. Trong bài này, tôi sẽ giới thiệu với các bạn một loại exchange rất mạnh mẽ khác của RabbitM là Headers Exchange. Xem thêm Việc làm IT hấp dẫn trên TopDev [irp posts="41007" name="Sử dụng Alternate Exchange trong RabbitMQ"] [irp posts="37562" name="Sử dụng binding Exchange to Exchange trong RabbitMQ"] Flow của một Message trong Headers Exchange Header exchange (amq.headers) được thiết kế để định tuyến với nhiều thuộc tính, để dàng thực hiện dưới dạng header của message hơn là routing key. Header exchange bỏ đi routing key mà thay vào đó định tuyến dựa trên header của message. Trường hợp này, broker cần một hoặc nhiều thông tin từ application developer, cụ thể là, nên quan tâm đến những tin nhắn với tiêu đề nào phù hợp hoặc tất cả chúng. Headers Exchange rất giống với Topic Exchange, nhưng nó định tuyến [...]

Marketplace Illustration
Sử dụng Topic Exchange (Publish/Subscribe) trong RabbitMQ

Bài viết được sự cho phép của tác giả Giang Phan Trong các bài viết trước, chúng ta đã cùng tìm hiểu về Direct Exchange và Fanout Exchange. Trong bài này, tôi sẽ giới thiệu với các bạn một loại exchange khác là Topic Exchange. Xem thêm Việc làm IT hấp dẫn trên TopDev [irp posts="37214" name="Kết nối RabbitMQ sử dụng Web STOMP Plugin"] [irp posts="37562" name="Sử dụng binding Exchange to Exchange trong RabbitMQ"] Flow của một Message trong Topic Exchange Topic exchange (amq.topic) định tuyến message tới một hoặc nhiều queue dựa trên sự trùng khớp giữa routing key và pattern. Topic exchange được sử dụng để thực hiện định tuyến thông điệp multicast. Loại Exchange này thường được sử dụng để thực hiện các biến thể của Pub/Sub pattern. Ví dụ một vài trường hợp sử dụng: Phân phối dữ liệu liên quan đến vị trí địa lý cụ thể. Xử lý tác vụ nền được thực hiện bởi nhiều workers, mỗi công việc có khả năng [...]

Marketplace Illustration
Sử dụng Alternate Exchange trong RabbitMQ

Bài viết được sự cho phép của tác giả Giang Phan Khi một Message đến Exchange, nếu không tìm thấy Queue nào phù hợp cho Message, Message sẽ tự động bị hủy. RabbitMQ cung cấp một tiện ích mở rộng AMQP được gọi là Alternate Exchange, để collect các Message không thể gửi được trước khi chúng bị huỷ. Chúng ta sẽ biết được cách làm việc và cài đặt của Alternate Exchange trong bài viết này. [irp posts="37562" name="Sử dụng binding Exchange to Exchange trong RabbitMQ"] [irp posts="38098" name="Sử dụng Dead Letter Exchange trong RabbitMQ"] Flow của một Message trong Alternate Exchange Alternate Exchange được định nghĩa để collect các Message không thể gửi được (rejected/ discarded/ unrouted) trước khi chúng bị huỷ. Bất kỳ 4 loại Exchange: Direct, Fanout, Topic, Headers có thể được chỉ định như một Alternate Exchange cho một Exchange khác thuộc bất kỳ loại nào. Tuy nhiên, ta nên sử dụng Fanout Exchange như một Alternate Exchange vì nó chuyển tiếp tin nhắn vô điều kiện. Để chỉ định một Alternate Exchange cho một Exchange GPCoder.AltTopicExchange, chúng ta chỉ cần [...]

Marketplace Illustration
Sử dụng Dead Letter Exchange trong RabbitMQ

Bài viết được sự cho phép của tác giả Giang Phan Dead Letter Exchange trong RabbitMQ Dead Letter Exchange là gì? Dead Letter là một tin nhắn không thể gửi đến người nhận. Dead Letter Queue (DLQ), là hàng đợi chứa tin nhắn chưa được gửi, không thể được gửi đến đích của chúng vì lý do này hay lý do khác. Trong hàng đợi tin nhắn, DLQ là một dịch vụ được cài đặt để lưu trữ các tin nhắn đáp ứng một hoặc nhiều sự kiện sau: Tin nhắn bị từ chối (rejected) bởi một Queue Exchange. Message hết hạn (expire) do Time to live (TTL). Vượt quá giới hạn chiều dài hàng đợi (length limit). [irp posts="35468" name="Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud"] [irp posts="37562" name="Sử dụng binding Exchange to Exchange trong RabbitMQ"] Dead Letter Exchange là một Exchange bình thường, có thể là một trong 4 loại Exchange (Direct, Fanout, Topic, Headers). Điều gì xảy ra với Dead Letter Message? Gửi tới một Dead Letter Exchange. Thêm một số thông tin vào header của Message trước [...]

Marketplace Illustration
Sử dụng binding Exchange to Exchange trong RabbitMQ

Bài viết được sự cho phép của tác giả Giang Phan Trong các bài viết trước chúng ta đã cùng tìm hiểu về các loại Exchange trong RabbitMQ. Có một câu hỏi đặt ra là có thể thực hiện binding một Exchange đến Exchange khác hay không? Câu trả lời là có và chúng ta sẽ thấy cách thực hiện như thế nào trong phần tiếp theo của bài viết này. [irp posts="37214" name="Kết nối RabbitMQ sử dụng Web STOMP Plugin"] [irp posts="37219" name="Sử dụng publisher confirm trong RabbitMQ"] Flow của một Message trong Exchange-to-Exchange bindings Để dễ hiểu, tôi sẽ mô tả Flow của một Message được chuyển từ Topic Exchange sang Header Exchange. Sơ đồ bên dưới là sự kết hợp của sơ đồ ở bài viết Topic Exchange và Header Exchange. Điểm khác biệt duy nhất là cách mà Header Exchange binding tới Topic Exchange với routing key pattern “#.gpcoder.com“. Một Producer publish một Message đến source Exchange với một routing key dựa trên loại của Exchange. Trong trường hợp này là GPCoderTopicExchange. Có 2 Queue: QJava  [...]

Marketplace Illustration
Sử dụng publisher confirm trong RabbitMQ

Bài viết được sự cho phép của tác giả Giang Phan Publisher confirms là một extension của RabbitMQ để thực hiện publish Message đáng tin cậy. Khi publisher confirms được bật trên một Channel, các Message mà Producer  publish phải được xác nhận bởi Broker là đã nhận thành công/ thất bại. Từ đó chúng ta có thể ghi log, thông báo lỗi và / hoặc retry gửi tin nhắn. Trong bài viết này tôi sẽ hướng dẫn bạn sử dụng tính năng này. [irp posts="35468" name="Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud"] [irp posts="5665" name="[Python cơ bản thường dùng trong công việc] Phần 12 : Kết nối RabbitMQ"] Enabling Publisher Confirms trên một Channel Publishers confirms không được enable theo mặc định. Để enable chúng ta gọi phương thức confirmSelect(). Channel channel = connection.createChannel(); channel.confirmSelect(); Phương thức này phải được gọi trên mọi Channel mà ta muốn sử dụng, chỉ nên được kích hoạt một lần cho một Channel, không phải cho mọi Message được publish. Để biết một Message đã được publisher [...]

Marketplace Illustration
Kết nối RabbitMQ sử dụng Web STOMP Plugin

Bài viết được sự cho phép của tác giả Giang Phan Trong các bài viết trước mình đã giới thiệu với các bạn cách kết nối đến RabbitMQ sử dụng Java thông qua giao thức AMQP. Trong bài này, tôi sẽ giới thiệu với các bạn cách kết nối RabbitMQ sử dụng Javascript thông qua WebSocket. [irp posts="35468" name="Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud"] [irp posts="36152" name="Đôi chút về RabbitMQ"] Web STOMP Plugin là gì? Web STOMP plugin giúp chúng ta có thể sử dụng Javascript để kết nối đến RabbitMQ sử dụng giao thức STOMP thông qua WebSocket connection. RabbitMQ Web STOMP sử dụng giao thức STOMP, được cung cấp bởi RabbitMQ STOMP plugin và expose (hiển thị) nó bằng WebSocket. Để enable RabbitMQ Web STOMP plugin, sử dụng lênh sau: rabbitmq-plugins enable rabbitmq_web_stomp Sau khi enable, chúng ta có thể access một web socket endpoint tại context path: /ws Chẳng hạn: http://127.0.0.1:15674/ws Sử dụng Web STOMP Plugin Trong ví dụ bên dưới, tôi sẽ tạo một ứng dụng Echo server, đơn giản cho phép user [...]

Marketplace Illustration
Đôi chút về RabbitMQ

Bài viết được sự cho phép của tác giả Nguyễn Hữu Đồng Cuộc sống thiệt là thú vị, đã code là phải có bug, muốn không có bug thì đừng code và đôi khi chúng ta cũng phải chấp nhận code là một tính năng và sống chung với nó. Lúc hệ thống của mình nhỏ, xoay đi quảnh lại mình cũng chỉ làm những việc mình làm hằng ngày, chạy task dể serve client, không có cơ hội nhìn ra xem người ta đang làm gì, xã hội phát triển như thế nào rồi, và may mắn thay mình được tạo cơ hội để bước ra, vẫy vùng trên con sông lớn, dù chưa biết mình sẽ đi về đâu nhưng thà một phút huy hoàng rồi chợ tắt còn hơn le lói cả trăm năm, huy hoàng với bản thân thôi cũng đáng giá rồi. [irp posts="35468" name="Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud"] [irp posts="5665" name="[Python cơ bản thường dù [...]