我对 RabbitMQ 等消息代理的概念很陌生,并且想学习一些最佳实践。
RabbitMQ 似乎是促进微服务之间异步通信的好方法,但是,我有一个初学者问题,在其他地方找不到答案。
什么时候在微服务架构中不使用 RabbitMQ 等消息代理?
举个例子:
假设我有两项服务。服务A和服务B (auth服务)
客户端向服务A发出请求,服务A又必须与服务B (身份验证服务)通信以对用户进行身份验证并授权该请求。(使用基本身份验证)
Internet
Client ----------------> Service A +-------> Service B [Authenticate/Authorization]
HTTP request HTTP or AMQP??
Run Code Online (Sandbox Code Playgroud)
以我有限的理解,我可以预见在上述场景中使用 AMQP 的问题是服务A能够处理请求并在可接受的时间范围内向客户端发送响应,因为它必须等待服务 B消费并响应消息。
从本质上讲,让服务A通过 AMQP等待服务B的响应是一个坏主意吗?
或者我完全错过了 AMQP 的要点吗?
我有一个简单的登录视图,包括两个文本字段、一个指向注册视图的导航链接、一个指向忘记密码视图的导航链接和一个登录按钮。我可以选择任一文本字段并输入文本,但是在将文本输入任一文本字段后尝试按下视图上的任何其他控件(文本字段或导航链接),只会冻结应用程序,控制台窗口中没有记录任何错误消息。
我在与旧版本 Xcode / swift 相关的其他帖子中看到,这种类型的行为可以通过在主线程上执行的连续循环来解释,但是我看不出这如何适用于我的情况?
struct LoginForm : View {
@Binding var emailAddress : String
@Binding var password: String
var body: some View{
VStack(alignment: .leading){
Text("Email address")
.foregroundColor(Color.black)
.bold()
.font(.subheadline)
.padding(.leading, 12)
TextField("Email",text:$emailAddress)
.padding()
Text("Password")
.foregroundColor(Color.black)
.bold()
.font(.subheadline)
.padding(.leading, 12)
SecureField("Password",text:$password)
.padding()
}
}
}
struct LoginRootView : View {
@State private var emailAddress: String = ""
@State private var password: String = ""
@EnvironmentObject var authData: AuthData
var body: some View {
Group{
if self.authData.authenticationDidSucceed {
OnBoardRootView()
}else{ …
Run Code Online (Sandbox Code Playgroud)