我对 winforms 中的消息循环如何工作感到非常困惑。我正在处理 Windows 表单,我知道何时调用Application.Run(myform),因此它将创建一个消息队列和消息循环,然后显示我的表单并开始在消息队列中检索消息以进行调度。
我阅读了一些主题,但仍然不明白消息循环在幕后如何工作,UI 线程同时运行消息泵和执行代码?以及消息循环如何使用线程?
我的问题是:消息循环是否会在 UI 线程上运行。如果是,为什么它不阻塞 UI 线程?
如果问题不清楚,请告诉我,对不起,因为我的英语不好。
我宁愿有一个单独的CommandBusand EventBusand also ICommandHandler<TCommand>andIEventHandler<TCommand> 这样一个OrderEventHandler类看起来像:
public class OrderEventHandler :
IEventHandler<OrderPlaced>,
IEventHandler<OrderRegistrantAssigned>,
IEventHandler<OrderTotalsCalculated>,
IEventHandler<OrderConfirmed>,
IEventHandler<OrderExpired>,
IEventHandler<SeatAssignmentsCreated>,
IEventHandler<SeatAssigned>,
IEventHandler<SeatAssignmentUpdated>,
IEventHandler<SeatUnassigned>
{
public void Handle(OrderPlaced @event){...}
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
一个可能的解决方案是在Masstransit基础设施和我的之间提供一个采用者CQRS(比如ConsumerToHandlerAdopter<T>它只公开我通常需要的上下文细节)。
但是由于我是 新手Masstransit,我无法解决以后可能需要处理的问题。
所以我的问题是: 通常是否值得包装 Masstransit 以便我处理自己的基础设施?
我有spring boot rabbitmq应用程序,我必须将 Employee 对象发送到队列中。然后我设置了一个监听器应用程序。对员工对象进行一些处理并将此对象放入回调队列中。
为此,我在我的应用程序中创建了以下对象。
我的应用程序文件如下所示。
应用程序属性
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=foo
emp.rabbitmq.directexchange=EMP_EXCHANGE1
emp.rabbitmq.requestqueue=EMP_QUEUE1
emp.rabbitmq.routingkey=EMP_ROUTING_KEY1
Run Code Online (Sandbox Code Playgroud)
主类.java
package com.employee;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MainClass {
public static void main(String[] args) {
SpringApplication.run(
MainClass.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序上下文提供程序
package com.employee.config;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ConfigurableApplicationContext;
public class ApplicationContextProvider implements …Run Code Online (Sandbox Code Playgroud) message-queue rabbitmq spring-rabbit spring-amqp spring-boot
我有使用诸如RabbitMQ和其他消息传递技术的企业分布式系统的背景,尽管我对Actor Model.
话虽如此,我想知道使用Actor Model诸如AKKA或AKKA.NET类似的应用程序的框架是否是个好主意Whatsapp?鉴于此类应用程序的要求(高可用性、低延迟等...)。
我的另一个问题是,Erlang 的内置 actor 模型是大公司将其用于其消息传递应用程序的原因还是我不知道的其他原因?
技术解释受到高度赞赏。提前致谢。
我正在研究 redis SMQ 持久性。我的问题是,当发布者发布消息时,消费者突然停止了。当消费者再次连接时,是否可以从它停止的地方订阅消息?
我正在使用rabbitmq-server用 Scala 编写的消费者使用它并从中获取消息。这一直很有效,但是自从我将 RabbitMQ 服务器从一个服务器迁移到另一个服务器后,在尝试连接到它时出现以下错误:
com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.
Run Code Online (Sandbox Code Playgroud)
此外,rabbitmq-server日志:
=INFO REPORT==== 18-Jul-2018::15:28:05 ===
accepting AMQP connection <0.7107.0> (127.0.0.1:42632 -> 127.0.0.1:5672)
=ERROR REPORT==== 18-Jul-2018::15:28:05 ===
Error on AMQP connection <0.7107.0> (127.0.0.1:42632 -> 127.0.0.1:5672, state: starting):
PLAIN login refused: user 'my_personal_user' - invalid credentials
=INFO REPORT==== 18-Jul-2018::15:28:05 ===
closing AMQP connection <0.7107.0> (127.0.0.1:42632 -> 127.0.0.1:5672)
Run Code Online (Sandbox Code Playgroud)
我浏览了有关身份验证问题的所有 SO 问题,并找到了以下线索:
guest从远程连接所有这些线索都没有帮助我。我的凭据很好,我不是guest …
我正在使用多处理库中的队列在进程之间共享数据。
我有 2 个队列,都限制为 10 个对象,第一个队列有一个进程将对象“放入”其中,许多进程从中“获取”。
第二个队列有许多进程将对象“放入”其中,只有一个进程从中“获取”。
系统完美地工作了一段时间,然后开始表现奇怪:只有将对象“放入”第一个队列的进程继续工作,而从第一个队列读取的进程显然不再行为/工作(即使进程是活)。似乎这里有一个死锁,但我不确定,这是我的代码:
import multiprocessing
import logging
from multiprocessing import Process
logger = logging.get_logger(__name__)
# Processes 2, 3 ,4:
class Processes_234(Process):
def __init__(self, message_queue_1, message_queue_2):
Process.__init__(self)
self.message_queue_1 = message_queue_1
self.message_queue_2 = message_queue_2
def run(self):
while True:
try:
# get from queue
el1, el2, el3 = self.message_queue_1.get()
logger.debug('Processes234: get from queue')
except Exception as exp:
logger.debug("message_queue_1: queue empty, Exception message: " + str(exp))
# do some stuff with el1, el2, el3...
try:
# put into …Run Code Online (Sandbox Code Playgroud) 我们即将选择 Google Cloud Pub/Sub 作为我们的消息总线。一些消息需要在低延迟持续时间(例如小于 100-200 毫秒)内进行调度。
我在某处读到,在大量消息中,它表现良好,但对于每秒数百条消息等较少数量的消息,Pub/Sub 可能会产生高延迟。
在上一个问题中,主题也不清楚。从 2016 年开始,谷歌云发布/订阅延迟是多少。
是否有任何关于 Pub/Sub 延迟和与消息量关系的定义指标?
可以通过一些额外的配置来实现这一点吗?
Publish/Send方法。在这种情况下,如果我更改消息界面中的某些内容(例如,重命名属性),则不会出现编译时错误。为什么推荐这个?如何处理匿名对象的脆弱性?
谢谢!
message-queue ×10
c# ×2
masstransit ×2
rabbitmq ×2
actor-model ×1
akka ×1
akka.net ×1
amazon-sqs ×1
cqrs ×1
deadlock ×1
latency ×1
messages ×1
messaging ×1
python ×1
python-3.x ×1
redis ×1
spring-amqp ×1
spring-boot ×1
winforms ×1