Comments (5)
I totally agree with this one 👍
I have a SQS queue already in-front of the apns push sending artifacts, and the current unbounded in-memory queue would mean draining it and having it all in memory.
from pushy.
You could use a Guava RateLimiter[1] to limit the rate of adding messages
to the Queue, and make something like this:
https://gist.github.com/marcomorain/7470870#file-ratelimitedpushmanager-java
On Thu, Nov 14, 2013 at 4:12 PM, Francisco A. Lozano <
[email protected]> wrote:
I totally agree with this one [image: 👍]
I have a SQS queue already in-front of the apns push sending artifacts,
and the full in-memory queue would mean draining it and having it all in
memory.—
Reply to this email directly or view it on GitHubhttps://github.com//issues/20#issuecomment-28496782
.
from pushy.
@danmassie Thanks kindly for both the suggestion and the pull request!
I'm hesitant on this one because the queue size can fluctuate quite a bit during normal operation. Here's a situation I worry about:
- Caller enqueues a couple thousand notifications.
- We write all of the notifications to the wire. Queue is now empty.
- Caller checks queue size and gets
0
as a result. - The first notification is rejected by the APNs gateway. All subsequent messages are added back to the queue.
- The queue size is now "a couple thousand" - 1, but the caller still thinks it's empty.
Generally, I'm worried that the number of notifications in the queue isn't super meaningful until we've shut down (see #4), and just exposing the queue's size could lead to a false sense of certainty about the state of things. If the goal is to prevent memory usage from getting out of control, though, I wonder if there's something else we can try.
To be clear, though, I would do this in a heartbeat (and would have already done it) if we could be more certain about the fate of non-rejected notifications.
from pushy.
I think that exposing the size of the queue as an indicator of the size is better than nothing at all. I appreciate that it can change, but that is the nature of the process.
from pushy.
So I've been thinking about this and have a plan that I like a bit better than exposing the internal queue size.
Right now, we have one queue that does everything. New messages from the outside go into that queue, and so do messages that need to be resent. What I'd like to do is break that into two queues: an "interacts with the outside world" queue and a retry queue. The former -- the queue that accepts messages from the outside -- could optionally be provided by callers at construction time. If you wanted to, you could provide a bounded queue implementation.
The plan would be to make sure the retry queue is empty before taking new messages from the public-facing queue. That would mean you could be reasonably confident that things were moving forward if the public-facing queue started to drain. You could monitor the public queue and even alter its contents without fear of bad things happening to Pushy's internals. I think that would also help organize things in such a way that we could consider some robust solutions to #24, too.
Sound like that would solve your problem?
from pushy.
Related Issues (20)
- Intermittent layer 7 firewall blocks due to missing SNI HOT 2
- Requesting to release a new tag for Live activity support HOT 2
- Failed to create channel java.io.IOException: Connection reset by peer HOT 6
- upgrade the netty-transport from 4.0.37 to 4.1.37 HOT 2
- pushy0.15.0 Stream closed before a reply was received HOT 1
- Connection reset by peer. HOT 3
- ipv6 problem HOT 2
- java.util.concurrent.ExecutionException: io.netty.handler.codec.http2.Http2Exception: Error decoding headers: io/netty/handler/codec/http/HttpHeaderValidationUtil HOT 1
- pushy0.15.2 Stream closed before a reply was received And GOAWAYException HOT 2
- Is the proxy way to replace this? Then a mistake was made
- javax.net.ssl.SSLHandshakeException: Server chose TLSv1, but that protocol version is not enabled or not supported by the client. HOT 5
- Stream closed before write could take place HOT 4
- push 0.15.1 io.netty.handler.codec.http2.StreamBufferingEncoder$Http2GoAwayException in a lot of requests HOT 2
- Support for "apns-unique-id" HOT 1
- return success when send notifacation after uninstalling app HOT 1
- I use Pushy to push the message,then I get "success=true",but the phone not responding HOT 2
- couple of Live Activity issues: stale-date is missing, and relevance-score can now have a value greater than 1.0 HOT 2
- Native SSL provider is available; will use native provider. HOT 4
- ApnsChannelPool java.io.IOException "Failed to create channel - Connection reset by peer" HOT 2
- Network is unreachable: `api.push.apple.com/2620:149:208:4308:0:0:0:a:443` HOT 13
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pushy.