我设计了两个输入命令scheduleletterCommand
,它们将在几分钟内“发送一封信”...如果用户在该时间段内发送另一个命令cancelletterCommand
,则可以取消该命令。
我正在通过REST API控制器触发命令...
我希望看到的是日志语句,如果我计划一封信,并在接下来的五分钟内立即取消它,这些语句表示一封信被计划和取消。
Received schedule command for letter id e6e037be-3b6d-4ae3-80cd-12426adcd526
LetterScheduledEvent e6e037be-3b6d-4ae3-80cd-12426adcd526 SCHEDULED
LetterScheduledEvent e6e037be-3b6d-4ae3-80cd-12426adcd526 SCHEDULED
Received cancel command for letter id e6e037be-3b6d-4ae3-80cd-12426adcd526
Letter e6e037be-3b6d-4ae3-80cd-12426adcd526 cancelled CANCELLED
这是我的集合体-
java prettyprint-override">public class Letter {
@AggregateIdentifier
private String letterId;
private ScheduleToken scheduleToken;
@SuppressWarnings("UnusedDeclaration")
protected Letter() {
// Default constructor required by Axon Framework
}
@CommandHandler
public Letter(ScheduleLetterCommand cmd, EventScheduler scheduler) {
String id = cmd.getLetterId();
log.info("Received schedule command for letter id {}", letterId);
AggregateLifecycle.apply(new LetterScheduledEvent(id, LetterEventType.SCHEDULED));
this.scheduleToken = scheduler.schedule(Duration.ofMinutes(5), new BeginSendLetterEvent(id,LetterEventType.BEGIN_SEND));
}
@CommandHandler
public void handle(CancelLetterCommand cmd, EventScheduler eventScheduler) {
String letterId = cmd.getLetterId();
log.info("Received cancel command for letter id {}", letterId);
AggregateLifecycle.apply(new LetterCancelledEvent(letterId, LetterEventType.CANCELLED));
eventScheduler.cancelSchedule(scheduleToken);
}
@EventSourcingHandler
public void on(LetterScheduledEvent event) {
log.info("LetterScheduledEvent {} {}", event.getLetterId(), event.getEventType());
this.letterId = event.getLetterId();
}
@EventSourcingHandler
public void on(LetterCancelledEvent event) {
log.info("Letter {} cancelled {}", event.getLetterId(), event.getEventType());
scheduleToken = null;
}
@EventSourcingHandler
public void on(BeginSendLetterEvent event) {
log.info("Letter sending process started {} {}", event.getLetterId(), event.getEventType());
//complicated letter sending processes...
AggregateLifecycle.apply(new LetterSentEvent(event.getLetterId(), LetterEventType.SENT));
}
@EventSourcingHandler
public void on(LetterSentEvent event) {
log.info("Letter sent {} {}", event.getLetterId(), event.getEventType());
}
}
这是我的活动->
abstract class LetterMovementEvent(open val letterId: String, open val eventType: LetterEventType)
enum class LetterEventType {
SCHEDULED,
CANCELLED,
BEGIN_SEND,
SENT
}
data class LetterScheduledEvent(
override val letterId: String,
override val eventType: LetterEventType = LetterEventType.SCHEDULED
) : LetterMovementEvent(letterId, eventType)
data class LetterCancelledEvent(
override val letterId: String,
override val eventType: LetterEventType = LetterEventType.CANCELLED
) : LetterMovementEvent(letterId, eventType)
data class BeginSendLetterEvent(
override val letterId: String,
override val eventType: LetterEventType = LetterEventType.BEGIN_SEND
) : LetterMovementEvent(letterId, eventType)
data class LetterSentEvent(
override val letterId: String,
override val eventType: LetterEventType = LetterEventType.SENT
) : LetterMovementEvent(letterId, eventType)
你所注意到的@goldfish,是一个框架,它根据它已经发布的事件来获取你的聚合。因此,简而言之,您正在看到“活动来源在行动”。
通过字母
聚合中的@eventsourcinghandler
注释,您已经有效地创建了用于根据事件重新创建聚合的方法。
因此,如果您发送一个命令来取消这个聚合的字母,它将首先从事件中重新创建聚合。只有在解决了这个问题之后,才会真正将命令赋予@commandhandler
注释方法。
我对TextWatcher有一个恼人的问题。我一直在网上搜索,但什么也找不到。如果有人能帮助我,我将不胜感激。 由于某些原因,在一次文本更改时对TextWatcher事件的调用是不稳定的。有时它们被触发一次(就像它们应该被触发的那样),有时两次,有时三次。不知道为什么,整个事情都很直截了当。有时,PostTextChanged()上的可编辑参数在toString()和length()中返回空值。
我正在尝试添加一个搜索功能,在这个功能中,每当用户输入文本(一个字母接一个字母)时,网站都会向服务器发送一个收集信息的请求。对于这一点,我需要的是我假设的ContextChanged事件?我尝试过使用它,但活动无法启动。 还有我的代码: 你认为哪里不对?yall是否有比“ContextChanged事件”更好的解决方案来获得每次按键和搜索框?
使用mui.trigger()方法可以动态触发特定DOM元素上的事件。 .trigger( element , event , data ) element Type: Element 触发事件的DOM元素 event Type: String 事件名字,例如:'tap'、'swipeleft' data Type: Object 需要传递给事件的业务参数 示例 自动触发按钮的点击事件: var
我在我的应用程序中使用MutableLiveData进行基于事件的通信。我有单一活动两个片段架构。 在ViewModel的帮助下,我正在使用Fragment-1中的LiveData事件。但是,当我使用菜单栏用Fragment-2替换这个Fragment-1并最终返回Fragment-1时,LiveData的旧值再次被捕获。 如何避免这个问题?非常感谢任何帮助/建议!谢谢你。
问题内容: 好吧,我已经研究并没有找到以下问题的解决方法`’SQL Error (1442): Can not update table’ messages’ in stored function / trigger because it is already used by statement Which invoked this stored function / trigger.`` 我的触
我正在使用Amazon Transcripbe服务,并试图让CloudWatch事件激发一个Lambda函数,该函数执行对我的API的POST请求。 下面是Lambda函数 我已经将CloudWatch事件配置为监听Amazon Transcripbe服务,特别是监听作业状态更改为或。 这是我认为我的应用程序工作的唯一方式,转录作业是通过亚马逊转录服务调用的,然后当它完成时,点击我的API来更新我