iT邦幫忙

1

IIS站台一次只處理一個Request

請問前輩們,
我們在架設站台接收JSON指令時, 是否能限制站台一次只處理一個請求,
不可同時處理多個請求, 後續的request都列入佇列中, 逐一處理.
有辦法設定嗎?

player iT邦大師 1 級 ‧ 2020-07-09 22:52:57 檢舉
你聽過MSMQ嗎?
talento1 iT邦新手 4 級 ‧ 2020-07-09 23:01:35 檢舉
您好,
我沒聽過耶, 但剛剛稍微看了一下, 不太確定是否合適.
簡單就我的認知說明一下,
我們架設站台接收3rd party的JSON request.
經過內部對MSSQL的一連串處理後, 再以JSON response處理結果.
其中, 3rd party的程式我們無法調整, 只能照單全收.
以這樣的情境來看, MSMQ可適用嗎??
froce iT邦大師 1 級 ‧ 2020-07-10 07:52:44 檢舉
比較粗略的作法就是不要直接進SQL,先進入一個緩存,然後做先進先出的動作,等到SQL返回一個結果後,再送下一個。

這種動作就是MessageQueue,上面提到的MSMQ就是一種,開源的話目前大部分用RabbitMQ。
4
海綿寶寶
iT邦大神 1 級 ‧ 2020-07-09 22:59:10

試試 maxConnections
====以上答案作廢====
資訊系統的世界裡
同時處理多筆要求的為大宗
一次處理一筆的也不是沒有
這兩種分類都只是完成資訊系統的多種架構之一(How)

真正的重點在於你要做的是什麼資訊系統(What and Why)
如果你願意比較詳細一點說明你要做的是什麼系統
而不只是切一段局部的技術問題出來問

或許討論起來會比較有效率一點
也比較能解決你的問題

說不定
queue 不是在 HTTP 這段處理
而是在資料庫那段處理
或者在程式裡處理
又甚至
根本不用 queue 的機制

talento1 iT邦新手 4 級 ‧ 2020-07-09 23:29:14 檢舉

您好,
如果設定maxConnections=1的話, 似乎是一次只允許一個連線,
其他的連線都會直接被告知503錯誤.
但小弟是希望其他連線能夠排隊, 而不是直接報錯.
不過還是感謝您的資訊~

是我誤會了
我的答案是:我不會

w4560000 iT邦新手 4 級 ‧ 2020-07-10 09:03:49 檢舉

這樣第三方request不會有連線逾時的問題嗎?
還是你知道他們逾時時間是多少

1
I code so I am
iT邦研究生 4 級 ‧ 2020-07-10 09:31:22

曾經implement過兩種架構:

  1. Critical Application:完全不能漏掉任何request,我採用資料庫當作佇列,以時間為primary key。
  2. Non-critical Application:純粹發出訊息,我採用 Redis,使用內建的list。
1
浩瀚星空
iT邦超人 1 級 ‧ 2020-07-10 11:26:17

你這個問題,得要先了解需不需要回應。
才可以來計劃打算。

如果不需要回應的情況下。
就可以採用緩存處理的程序來處理。如上面說的 MSMQ。

但是,如果有需要等待回應。一般來說會比較無解。
畢竟這還需要去處理超時的問題。
如已經等待處理了。但對方因為等太久需要視為失敗處理。
那你正在排隊的指令你該怎麼處理?

我曾經也做過類似的東西,當時我的處理是一但斷開之後。
就在給與一個刪除的指令動作。
原本相安無事用了快1年多。

只到有一天。因廠商誤寫了一段請求指令。
把我的機器給操掛。

1
BMG50
iT邦新手 5 級 ‧ 2020-07-10 12:05:06

若出發點是維護數據庫的consistence,
可以在 controller/middleware中控制如何呼叫找數據的涵式
例如在java 中就有 synchronize 這一個keyword可用.

1
dscwferp
iT邦好手 1 級 ‧ 2020-07-10 12:52:16

A request 先來, 先處理
B request 時, A 還在處理 就等待?
等 A處理好, 再觸理B?
如果是這樣 那 B可以等待多久?
其實如果不考慮 B 可以等待過久 TIME OUT 的話!
或 A, B 都可以接收 處理完後回頭request的話!
那可以如下架構方式處理:

  1. 寫個接收前台 request 的 asp/aspx/jsp ... 等等網頁程式
  2. 寫個後台批次處理EXE/vbs...等程式

前台接收request後, 將request存入SQL SERVER Queue 表 , 然後等待
後台 批次處理Queue 表資料, 將結果寫回
前台程式查詢到其Queue 處理完後, 回應回去

希望以上能解決您的問題!

我要發表回答

立即登入回答