Make push sender queue depth configurable or disable-able.
// FREEBIE
This commit is contained in:
parent
33e60f2527
commit
d8a758211f
|
@ -185,7 +185,7 @@ public class WhisperServerService extends Application<WhisperServerConfiguration
|
||||||
TwilioSmsSender twilioSmsSender = new TwilioSmsSender(config.getTwilioConfiguration());
|
TwilioSmsSender twilioSmsSender = new TwilioSmsSender(config.getTwilioConfiguration());
|
||||||
SmsSender smsSender = new SmsSender(twilioSmsSender);
|
SmsSender smsSender = new SmsSender(twilioSmsSender);
|
||||||
UrlSigner urlSigner = new UrlSigner(config.getS3Configuration());
|
UrlSigner urlSigner = new UrlSigner(config.getS3Configuration());
|
||||||
PushSender pushSender = new PushSender(apnFallbackManager, pushServiceClient, websocketSender);
|
PushSender pushSender = new PushSender(apnFallbackManager, pushServiceClient, websocketSender, config.getPushConfiguration().getQueueSize());
|
||||||
ReceiptSender receiptSender = new ReceiptSender(accountsManager, pushSender, federatedClientManager);
|
ReceiptSender receiptSender = new ReceiptSender(accountsManager, pushSender, federatedClientManager);
|
||||||
FeedbackHandler feedbackHandler = new FeedbackHandler(pushServiceClient, accountsManager);
|
FeedbackHandler feedbackHandler = new FeedbackHandler(pushServiceClient, accountsManager);
|
||||||
Optional<byte[]> authorizationKey = config.getRedphoneConfiguration().getAuthorizationKey();
|
Optional<byte[]> authorizationKey = config.getRedphoneConfiguration().getAuthorizationKey();
|
||||||
|
|
|
@ -22,6 +22,10 @@ public class PushConfiguration {
|
||||||
@NotEmpty
|
@NotEmpty
|
||||||
private String password;
|
private String password;
|
||||||
|
|
||||||
|
@JsonProperty
|
||||||
|
@Min(0)
|
||||||
|
private int queueSize = 200;
|
||||||
|
|
||||||
public String getHost() {
|
public String getHost() {
|
||||||
return host;
|
return host;
|
||||||
}
|
}
|
||||||
|
@ -37,4 +41,8 @@ public class PushConfiguration {
|
||||||
public String getPassword() {
|
public String getPassword() {
|
||||||
return password;
|
return password;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getQueueSize() {
|
||||||
|
return queueSize;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,12 +47,16 @@ public class PushSender implements Managed {
|
||||||
private final PushServiceClient pushServiceClient;
|
private final PushServiceClient pushServiceClient;
|
||||||
private final WebsocketSender webSocketSender;
|
private final WebsocketSender webSocketSender;
|
||||||
private final BlockingThreadPoolExecutor executor;
|
private final BlockingThreadPoolExecutor executor;
|
||||||
|
private final int queueSize;
|
||||||
|
|
||||||
public PushSender(ApnFallbackManager apnFallbackManager, PushServiceClient pushServiceClient, WebsocketSender websocketSender) {
|
public PushSender(ApnFallbackManager apnFallbackManager, PushServiceClient pushServiceClient,
|
||||||
|
WebsocketSender websocketSender, int queueSize)
|
||||||
|
{
|
||||||
this.apnFallbackManager = apnFallbackManager;
|
this.apnFallbackManager = apnFallbackManager;
|
||||||
this.pushServiceClient = pushServiceClient;
|
this.pushServiceClient = pushServiceClient;
|
||||||
this.webSocketSender = websocketSender;
|
this.webSocketSender = websocketSender;
|
||||||
this.executor = new BlockingThreadPoolExecutor(50, 200);
|
this.queueSize = queueSize;
|
||||||
|
this.executor = new BlockingThreadPoolExecutor(50, queueSize);
|
||||||
|
|
||||||
SharedMetricRegistries.getOrCreate(Constants.METRICS_NAME)
|
SharedMetricRegistries.getOrCreate(Constants.METRICS_NAME)
|
||||||
.register(name(PushSender.class, "send_queue_depth"),
|
.register(name(PushSender.class, "send_queue_depth"),
|
||||||
|
@ -71,15 +75,16 @@ public class PushSender implements Managed {
|
||||||
throw new NotPushRegisteredException("No delivery possible!");
|
throw new NotPushRegisteredException("No delivery possible!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (queueSize > 0) {
|
||||||
executor.execute(new Runnable() {
|
executor.execute(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (device.getGcmId() != null) sendGcmMessage(account, device, message);
|
sendSynchronousMessage(account, device, message);
|
||||||
else if (device.getApnId() != null) sendApnMessage(account, device, message);
|
|
||||||
else if (device.getFetchesMessages()) sendWebSocketMessage(account, device, message);
|
|
||||||
else throw new AssertionError();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
sendSynchronousMessage(account, device, message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendQueuedNotification(Account account, Device device, int messageQueueDepth)
|
public void sendQueuedNotification(Account account, Device device, int messageQueueDepth)
|
||||||
|
@ -94,6 +99,13 @@ public class PushSender implements Managed {
|
||||||
return webSocketSender;
|
return webSocketSender;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void sendSynchronousMessage(Account account, Device device, Envelope message) {
|
||||||
|
if (device.getGcmId() != null) sendGcmMessage(account, device, message);
|
||||||
|
else if (device.getApnId() != null) sendApnMessage(account, device, message);
|
||||||
|
else if (device.getFetchesMessages()) sendWebSocketMessage(account, device, message);
|
||||||
|
else throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
private void sendGcmMessage(Account account, Device device, Envelope message) {
|
private void sendGcmMessage(Account account, Device device, Envelope message) {
|
||||||
DeliveryStatus deliveryStatus = webSocketSender.sendMessage(account, device, message, WebsocketSender.Type.GCM);
|
DeliveryStatus deliveryStatus = webSocketSender.sendMessage(account, device, message, WebsocketSender.Type.GCM);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue