You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
AgQueue is a server process that can use almost any database as it's back end. It essentially turns any supported database into a full fledged work queue.
6
+
Procession is a server process that can use almost any database as its back end. It essentially turns any supported database into a full fledged work queue.
7
7
8
-
AgQueue runs between the clients and the database and automatically provides features of an advanced work queue or messaging system.
8
+
Procession runs between the clients and the database and automatically provides features of an advanced work queue or messaging system.
9
9
10
10
## Purpose
11
11
12
12
To reliably deliver messages to a requestor/subscriber. Successful messages are only delivered to one REQ/SUB. In case of failure, the message will be redelivered, after a delay, unless the retry count is exceeded.
13
13
14
-
Have you ever used MSMQ, only to be impacted by it's limitations? For example, not being able to use priority with transactions. This aims to allieviate those pain points.
14
+
Have you ever used MSMQ, only to be impacted by its limitations? For example, not being able to use priority with transactions. This aims to alleviate those pain points.
15
15
16
16
Besides, for simple work queues, MSMQ may be overkill. Same with RabbitMQ and others.
17
17
@@ -23,27 +23,27 @@ Besides, for simple work queues, MSMQ may be overkill. Same with RabbitMQ and o
23
23
24
24
### Example
25
25
26
-
A classic example of when to use a work queue is sending email from a website. When your users request a password change or any other activity that will send an email, you don't want their browsing experience to slow down while the email is sent, so you place a message into a queue, which is near instant. In the background or on another machine, the message is picked up and and email is sent out.
26
+
A classic example of when to use a work queue is sending email from a website. When your users request a password change or any other activity that will send an email, you don't want their browsing experience to slow down while the email is sent, so you place a message into a queue, which is near instant. In the background or on another machine, the message is picked up and an email is sent out.
27
27
28
-
## AgQueue Features
28
+
## Procession Features
29
29
30
30
* Transactions. Transactions are mandatory. Transactions have expiry timespans. Transactions can be explicitly extended for long running processes.
31
-
* Priority. Messages are returned based on Priority and then by first in. Priority can be turned off my simply not setting it on each message.
31
+
* Priority. Messages are returned based on Priority and then by first in. Priority can be turned off by simply not setting it on each message.
32
32
* Durable. Messages are always reliably stored to disk.
33
33
* Multiple Queues. Create as many queues as needed.
34
-
* Baked-in Retry. Messages automatically reenter the queue after a Transaction rollback, BUT you can set a retry delay, eliminating need for a seperate retry queue and preventing poison messages.
34
+
* Baked-in Retry. Messages automatically reenter the queue after a Transaction rollback, BUT you can set a retry delay, eliminating need for a separate retry queue and preventing poison messages.
35
35
* Optional message metadata. Allows storage of custom data relating to the message.
36
36
* FIFO or custom ordering based on json message metadata, correlation id, group name or tag value. Beware of orphaned messages!
37
37
* Optional Message History.
38
38
* Optional Correlation ID (integer) and/or Group string to assist with grouping of messages to pull.
39
-
* Optional Tags. Tags can be applied to any message. A tag can also have a value, for example, year=2019. There can be multiple tags on a message. This is a more effeicient way of organizing and pulling messages than using the metadata.
39
+
* Optional Tags. Tags can be applied to any message. A tag can also have a value, for example, year=2019. There can be multiple tags on a message. This is a more efficient way of organizing and pulling messages than using the metadata.
40
40
41
41
## Additional Details
42
42
43
-
AgQueue consists of a server process that contains a gRPC communication server and a gRPC client for communicating with the queue.
43
+
Procession consists of a server process that contains a gRPC communication server and a gRPC client for communicating with the queue.
44
44
45
-
AgQueue uses SQLite for storage. While not as fast as using in-memory containers, it's HIGHLY resilient to machine failures, i.e. a spurious reboot won't cause your queue to disappear. At a future date, we may offer different storage options, including memory-only, for those that don't want durable storage.
45
+
Procession uses SQLite for storage. While not as fast as using in-memory containers, it's HIGHLY resilient to machine failures, i.e. a spurious reboot won't cause your queue to disappear. At a future date, we may offer different storage options, including memory-only, for those that don't want durable storage.
46
46
47
-
AgQueue is built with C# in .NET 9. This means it should run on Windows, Linux and Mac.
47
+
Procession is built with C# in .NET 9. This means it should run on Windows, Linux and Mac.
48
48
49
-
We'll post benchmarks once the project is complete, but the goal is more durability and resilency than raw speed.
49
+
We'll post benchmarks once the project is complete, but the goal is more durability and resiliency than raw speed.
Copy file name to clipboardExpand all lines: dev_overview.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,22 +1,22 @@
1
-
# Development overview of AgQueue #
1
+
# Development overview of Procession #
2
2
3
-
This document serves as a collection of development notes and will grow substantially and become mroe organized over time.
3
+
This document serves as a collection of development notes and will grow substantially and become more organized over time.
4
4
5
5
## Project Descriptions: ##
6
6
7
-
AgQueue.Library - The API library performing queue and message functions. This is the core of the project. This library will be exposed via REST or a TCP server. It can use any storage library, although, currently only SQLite is supported.
7
+
Procession.Library - The API library performing queue and message functions. This is the core of the project. This library will be exposed via REST or a TCP server. It can use any storage library, although, currently only SQLite is supported.
8
8
9
-
AgQueue.Library.Tests - unit and integration tests for the Library project
9
+
Procession.Library.Tests - unit and integration tests for the Library project
10
10
11
-
AgQueue.TcpClient - A TCP client to communicate with AgQueue. This will be used to
11
+
Procession.TcpClient - A TCP client to communicate with Procession. This will be used to
12
12
13
-
AgQueue - Project for Server process hosting the AgQueue.Library. This will eventually be a TCP and REST server, configurable by a config file.
13
+
Procession - Project for Server process hosting the Procession.Library. This will eventually be a TCP and REST server, configurable by a config file.
14
14
15
-
AgQueue.Common - Will eventually contain interfaces for the client libraries
15
+
Procession.Common - Will eventually contain interfaces for the client libraries
16
16
17
17
## Expected Development Timeline: ##
18
18
19
-
Complete AgQueue.Library project. This should allow for the following functions:
19
+
Complete Procession.Library project. This should allow for the following functions:
20
20
21
21
1) Create Transaction
22
22
2) Commit Transaction
@@ -30,23 +30,23 @@ Complete AgQueue.Library project. This should allow for the following functions
30
30
10) Delete Message - Deletes a message without marking it as processed
31
31
11) GetMessageCount - Get the number of message queued
32
32
33
-
As each function is completed, unit tests should be created to comfirm functionality
33
+
As each function is completed, unit tests should be created to confirm functionality
34
34
35
35
## Developer Expectations ##
36
36
37
37
Code should follow style cop recommendations. The style cop analyzer is checked in with each project.
38
38
39
39
There should be no warnings in a Pull Requests.
40
40
41
-
All public methods and properties should be well documented using the documentaion comment: ///
41
+
All public methods and properties should be well documented using the documentation comment: ///
42
42
43
43
## Design Decisions ##
44
44
45
45
### Primary Keys ###
46
46
47
47
Primary keys are int64s. They are created by the application, instead of the database or storage mechanism. This allows for handling of storage that doesn't provide a way to increment the primary key.
48
48
49
-
While using something like a GUID would come with certain advantages, I've seen problems with using them. Many databases don't index them effeciently when they aren't sequential. Performance could be impacted with a great deal of lookups by the primary key. I've seen SQLServer suffer when using GUIDs as the primary key.
49
+
While using something like a GUID would come with certain advantages, I've seen problems with using them. Many databases don't index them efficiently when they aren't sequential. Performance could be impacted with a great deal of lookups by the primary key. I've seen SQLServer suffer when using GUIDs as the primary key.
50
50
51
51
Not using GUID has some serious tradeoffs. Only one process can use the storage, since multiple processes would cause primary key conflicts.
0 commit comments