I'm on Sitecore 8.2 update 3 with Email Experience Manager 3.4.2 rev. 170713.
I have CM and Dedicated Email Delivery server. Both of them are used by EXM to process email campaigns. Processing a single email campaign usually takes several (maybe 10) hours.
CM server only processes a small percentage of the messages. The reason for that is that we don't want to make content authors' lives any harder when the email campaigns are processed. So the Sleep
parameter of the SendEmail
EXM pipeline is set on CM server to a high value.
There was an email campaign in progress when IIS app pool on CM server was recycled (automatic recycle every N minutes). My EXM campaign state was change to PAUSED
. Dedicated Email Delivery server was still processing the campaign and I can see that 100% of the emails were sent. But the campaign is still in the PAUSED
state. Its state was never changed to FINISHED
.
The only options I was able to think of are:
- Set the app pool to never recycle automatically - but there are people who believe it's not good for the application health.
- Add a button on CM and on DED server to allow marketers to recycle app pool before they start a campaign - but I think it's really really bad and I don't want to do this.
I asked this question on https://sitecorechat.slack.com and Pete Navarra sugested to create a task that runs to check for paused dispatches and restart them.
I think this could do the trick, but:
- I feel like it's a workaround not a fix for the problem.
- It assumes that there will be something which will start the CM server after the app pool is recycled.
- What if marketers pause a campaign on purpose? The task will start it.
Anyone can think of a better solution?
Thanks in advance.