THẢO LUẬN

Aug 11th, 2022 4:03 p.m.

@datbv e có xem bài sau rồi ạ. thì bài toán của anh ở đây là đang thay đổi trạng thái và thằng order ở đây là Compensable transaction. Vậy có trường hợp nào trong Pivot transaction có >= 2 service không ạ. E nghĩ là có chứ nhỉ . Nếu có thì lúc này mình muốn rollback với các record là chữ hoặc số bất kì. (nó không còn chỉ là một vài trạng thái nữa) -> thì lúc này nếu e chỉ lưu correlation id là id của bảng trong service thì làm sao để e có thông tin để rollback lại khi mà nó đã được commit rồi ạ.

0
Avatar
đã bình luận cho bài viết
Aug 11th, 2022 2:17 p.m.

bên mình hiện có một số job code bằng Svelte bạn nào muốn nghiên cứu về svelte hay nâng cao hãy tham gia dự án với bên mình. LH SĐT 0779353588.

0
Aug 11th, 2022 10:59 a.m.

Có thể do kiến thức của mình chưa đủ tốt để diễn đạt 😭. Dù sao thì cũng cảm ơn bạn đã đọc

0
Aug 11th, 2022 9:37 a.m.

bạn cho mình hỏi là làm cách nào để kiểm tra token ngoài sử dụng hàm logout() không?

0
Aug 11th, 2022 8:20 a.m.

để đây xem khi nào tổng hợp http://maps.google.com/url?q=https://congnghetudonghoa.com/

http://google.it/url?q=https://congnghetudonghoa.com/

http://google.es/url?q=https://congnghetudonghoa.com/

http://google.nl/url?q=https://congnghetudonghoa.com/

http://google.se/url?q=https://congnghetudonghoa.com/

http://images.google.com/url?q=https://congnghetudonghoa.com/

http://google.com.mx/url?q=https://congnghetudonghoa.com/

http://google.co.nz/url?q=https://congnghetudonghoa.com/

http://google.com.ar/url?q=https://congnghetudonghoa.com/

http://google.no/url?q=https://congnghetudonghoa.com/

http://google.ro/url?q=https://congnghetudonghoa.com/

http://google.com.ph/url?q=https://congnghetudonghoa.com/

http://google.com.vn/url?q=https://congnghetudonghoa.com/

http://google.gr/url?q=https://congnghetudonghoa.com/

http://google.cl/url?q=https://congnghetudonghoa.com/

http://google.com.my/url?q=https://congnghetudonghoa.com/

http://google.sk/url?q=https://congnghetudonghoa.com/

http://google.co.il/url?q=https://congnghetudonghoa.com/

http://google.rs/url?q=https://congnghetudonghoa.com/

http://google.lt/url?q=https://congnghetudonghoa.com/

http://google.si/url?q=https://congnghetudonghoa.com/

http://google.ae/url?q=https://congnghetudonghoa.com/

http://google.hr/url?q=https://congnghetudonghoa.com/

http://google.ee/url?q=https://congnghetudonghoa.com/

http://google.com.pe/url?q=https://congnghetudonghoa.com/

http://google.com.sa/url?q=https://congnghetudonghoa.com/

http://google.lv/url?q=https://congnghetudonghoa.com/

http://google.com.np/url?q=https://congnghetudonghoa.com/

http://google.co.ve/url?q=https://congnghetudonghoa.com/

http://google.com.pk/url?q=https://congnghetudonghoa.com/

http://google.lk/url?q=https://congnghetudonghoa.com/

http://google.ad/url?q=https://congnghetudonghoa.com/

http://google.com.ec/url?q=https://congnghetudonghoa.com/

http://google.com.ng/url?q=https://congnghetudonghoa.com/

http://google.lu/url?q=https://congnghetudonghoa.com/

http://google.com.uy/url?q=https://congnghetudonghoa.com/

http://google.com.bd/url?q=https://congnghetudonghoa.com/

http://google.by/url?q=https://congnghetudonghoa.com/

http://txdot.gov/url?q=https://congnghetudonghoa.com/

http://google.tn/url?q=https://congnghetudonghoa.com/

http://google.co.ke/url?q=https://congnghetudonghoa.com/

http://google.co.cr/url?q=https://congnghetudonghoa.com/

http://google.com.pr/url?q=https://congnghetudonghoa.com/

http://google.com.do/url?q=https://congnghetudonghoa.com/

http://google.com.lb/url?q=https://congnghetudonghoa.com/

http://google.is/url?q=https://congnghetudonghoa.com/

http://google.ba/url?q=https://congnghetudonghoa.com/

http://google.com.gt/url?q=https://congnghetudonghoa.com/

http://google.dz/url?q=https://congnghetudonghoa.com/

http://google.com.sv/url?q=https://congnghetudonghoa.com/

http://google.com.py/url?q=https://congnghetudonghoa.com/

http://google.kz/url?q=https://congnghetudonghoa.com/

http://google.hn/url?q=https://congnghetudonghoa.com/

http://google.com.gh/url?q=https://congnghetudonghoa.com/

http://google.com.bo/url?q=https://congnghetudonghoa.com/

http://google.jo/url?q=https://congnghetudonghoa.com/

http://google.com.mt/url?q=https://congnghetudonghoa.com/

http://google.cat/url?q=https://congnghetudonghoa.com/

http://google.com.kw/url?q=https://congnghetudonghoa.com/

http://google.com.kh/url?q=https://congnghetudonghoa.com/

http://google.pl/url?q=https://congnghetudonghoa.com/

http://google.com.hk/url?q=https://congnghetudonghoa.com/

http://devb.gov.hk/url?q=https://congnghetudonghoa.com/

http://youth.gov.hk/url?q=https://congnghetudonghoa.com/

http://hueuni.edu.vn/url?q=https://congnghetudonghoa.com/

http://drugoffice.gov.hk/url?q=https://congnghetudonghoa.com/

http://rensselaerny.gov/url?q=https://congnghetudonghoa.com/

http://sie.gov.hk/url?q=https://congnghetudonghoa.com/

0
Aug 11th, 2022 7:27 a.m.

main() { // Compile-time error! int shouldBeDouble = 1.0.addTen(); } Bạn có ý gì khi ép kiểu dữ liệu 1.0 cho một biến shouldBeDouble kiểu số nguyên int :<<

0
Aug 11th, 2022 7:14 a.m.

Mình mới sử dụng ruby, mình từ js và php qua nên vẫn thích làm theo kiểu cũ: tạo 1 hàm xác thực, trả về bool, mình thấy sử dụng cũng ngắn gọn, không cần cài thêm gói, bên dưới là code của mình

  def validate_captcha
    uri = URI('https://www.google.com/recaptcha/api/siteverify')
    request_params = {
      :response => params['g-recaptcha-response'],
      :secret   => captcha_private_key
    }
    uri.query = URI.encode_www_form(request_params)
    res = Net::HTTP.get_response(uri)

    result = false
    if res.is_a?(Net::HTTPSuccess)
      body = JSON.parse res.body
      if body['success'].present? && body['success'] == true
        result = true
      end
    end
    result
  end
0
Avatar
đã bình luận cho bài viết
Aug 11th, 2022 7:09 a.m.

Mình đang chạy 1 server elastic như 1 node vậy nếu mình mở rộng như cách của bạn thì cái server thứ 2 cũng phải cung cấu hình với cái đầu phải không bạn.

0
Avatar
đã bình luận câu trả lời trong câu hỏi
Aug 11th, 2022 7:01 a.m.

Họ làm bên bất động sản, không biết code mà cũng không thuê Dev, coi hướng dẫn làm Wordpress thì làm sao mà tự debug được.

0
Aug 11th, 2022 6:56 a.m.

yep, vậy mình mới nói phụ thuộc vào team skill khá nhiều nhưng trước mắt cứ phải hiểu đúng và đủ cái đã rồi tính tiếp 😄

0

Chào b. tôi có thể liên hệ với bạn ntn. Vì có một số lỗi nằm ở code

0
Avatar
đã bình luận câu trả lời trong câu hỏi
Aug 11th, 2022 3:39 a.m.

nai xừ

0
Aug 11th, 2022 2:54 a.m.

có nhiều lib + framework để làm saga đó em: temporal.io, eventuate.io... nhưng flow a nghĩ chỉ vài service thôi chứ, flow mà span ra cả mấy chúc service a cũng chưa thấy bao giờ 😄 ngoài ra saga chỉ là 1 phải giáp, k phải lúc nào apply saga cũng hay

0
Aug 11th, 2022 2:51 a.m.

đọc bài sau của a để biết cách sắp xếp transaction hợp lí nhé -> paymentService nên là pivot transaction. tất cả các event e đều cần có correlation id nhé. ví dụ với bài này correlation_id là order_id. Khi lưu data e phải lưu cả id này cùng record -> khi nhận event e có c_id đó r, bản thân thông tin rollback đã store trong record đó r, vấn đề là làm cách nào tìm đúng record -> c_id.

0
Aug 11th, 2022 2:49 a.m.

hiện tại có 3 cách để làm em nhé:

  1. polliing publíher: chính là relay publisher ở trên, nó hiệu quả với bài toán k cần real-time, và lượng event ít.
  2. transaction log tailing: e có thể tham khảo debezium nhé, idea là nó read file transaction log để build event
  3. publish id: e publish trước event id sang 1 service khác, service khác đó sẽ read data từ db với id đó để publish. phải impl thêm retry hoặc cancel eventid...
0
Avatar
đã bình luận câu trả lời trong câu hỏi
Aug 11th, 2022 12:55 a.m.

theo mình khởi đầu thì có thể tham khảo Factory Method hoặc Builder Method, 2 cái này đều dùng cho khởi tạo khá dễ áp dụng trong các dự án, ko rõ cụ thể bạn đang làm với công nghệ nào nhỉ

0

Okie em. Em có thể xem thêm các bài viết của anh ở đây nhé.

https://hblab-ngocnd.github.io/blogs/

0

Hay quá a. Nhưng mà e thấy quả SAGA pattern này hâu như phải implement bằng cơm 😄 và cũng vất vả để apply nó một cách ngon nghẻ . Như chỗ e hiện tại nó đang nở ra tận mấy chục con microservice mà tất cả service đấy muốn apply saga thì đúng vỡ mồm thật. 😄

0
Aug 10th, 2022 3:57 p.m.

À e có thêm 1 thắc mắc nữa ạ. Ví dụ e sử dụng Orchestration -> sau khi e thanh toán xong, cộng trừ tiền các kiểu cho khách rồi, lưu vào DB luôn rồi, khách hàng đã thấy trên máy mình đã bị trừ tiền rồi.(tức là transaction ở paymentService đã được commit, và đóng rồi) -> sau đến nhà bếp service thì hết nguyên liệu thì nhà bếp bắn ra lỗi cho orchestration -> sau đấy orchestration trigger cho paymentService là không có nguyên liệu làm , mày trả lại tiền cho người ta đi -> thì chỗ này thằng paymentService phải lấy thông tin đâu ra để rollback lại ạ. (vì e nghĩ là paymenService và nhà bếp service sẽ là 2 localTransaction khác nhau). Liệu lúc save hay update dữ liệu có nên tạo ra 1 bản backup hay không -> nếu tạo thì sẽ có phải là bảng nào nằm trong vùng quản lý orchestration cũng phải tạo 1 bảng backup hay không. E cảm ơn.

0
Aug 10th, 2022 3:48 p.m.

e có câu hỏi như này ạ. Ở chỗ paymentService , sau khi thực hiện bussiness thanh toán tiền xong -> thì lưu thông tin thanh toán vào DB và đồng thời lưu vào out_box table (cả 2 thằng save này đều ngon nghe). Thì ở chỗ này tiếp theo a sẽ publish message lên kafka (xem như là mình đã chọn kafka làm message broker) để thằng relay publisher sẽ consumes. hay là a sẽ tạo schedule tại relay publisher để quét những message đã được lưu ạ. Thanks a vì những bài viết hay như thế này ạ.

0
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí