mimi-messaging 1.2.2 → 1.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: e0b464776f714d968a8d9ab990cde1e440358604
4
- data.tar.gz: 72d61df40a62d4808d56c3218018df171d2c288d
2
+ SHA256:
3
+ metadata.gz: 8fa18eabeb0e00848c4eaf7eca202e77cef3526bd6995506ce810f0000dbdc9e
4
+ data.tar.gz: 34808e22b8405e89de11f0c571ac98004a2be18fa52e3587877e8f9eeb9c0dc0
5
5
  SHA512:
6
- metadata.gz: fb34142287f5cc906ce350b756999aa58dcf014cdf391db5c07c5f859e58efff3234425e2754562aa290b349781938b1ad04bdc289ba0d15394d5a1ba6a19431
7
- data.tar.gz: 30da26107b66c684f5a7666d2978483b82604b900ed29613ab13cabc529596536200a85444a842e7e2bb2d949afeda65679f862873e5ea6385403d1e1e78a600
6
+ metadata.gz: c88607df18839125d858dea4ca4a076403910ac0f1ced785289dbe990910ff193ca069d16e6a72e67a43119ef983671e2dde3582a1871b9118fca3ac774746b8
7
+ data.tar.gz: 485b23c110854107a0580f0932a1bd60a1a5d3bf45ae57cf914dd778733a328adf0c642fbcdde1cf2ee2ba5d87b627a5fc97486e1682daef09277d0dbd168fdc
data/README.md CHANGED
@@ -1,7 +1,11 @@
1
- # [WIP] mimi-messaging
1
+ # mimi-messaging
2
2
 
3
3
  Interservice communication via message bus for microservices.
4
4
 
5
+ ## Is it production ready?
6
+
7
+ No. Consider this project a WIP.
8
+
5
9
  ## What
6
10
 
7
11
  `mimi-messaging` is a Messaging layer -- an interservice
@@ -15,6 +19,9 @@ See also: [Overview of Messaging layer properties](docs/Messaging_Layer_Properti
15
19
 
16
20
  ## Why
17
21
 
22
+ When it comes to organizing communications between different microservices of a system,
23
+ currently there is only two options: to use HTTP or a message bus.
24
+
18
25
  [Why HTTP is a bad choice for interservice communication?](docs/Why_HTTP_is_a_bad_choice.md)
19
26
 
20
27
  TBD: Message bus pro's and con's.
@@ -45,10 +52,20 @@ Mimi::Messaging.start
45
52
 
46
53
  ## Usage
47
54
 
55
+ Producing messages:
48
56
  ```
57
+ # COMMAND
58
+ Mimi::Messaging.command("users/lock", id: "b3cc29c8d2ec68e0")
59
+
60
+ # QUERY
49
61
  response = Mimi::Messaging.query("orders/show", id: 123)
62
+
63
+ # EVENT
50
64
  ```
51
65
 
66
+ See (/examples)[/examples] folder for more examples on how to produce and consume messages.
67
+
68
+
52
69
  ## Adapters
53
70
 
54
71
  `mimi-messaging` is not bound to a specific message broker implementation like RabbitMQ or Kafka. It interacts with a message broker using an adapter interface and
@@ -58,7 +75,7 @@ there are several available adapters:
58
75
  * RabbitMQ (TBD)
59
76
  * NATS (TBD)
60
77
  * [Amazon SQS/SNS](https://github.com/kukushkin/mimi-messaging-sqs_sns)
61
- * in-memory (single process)
78
+ * (in-memory (single process))[lib/mimi/messaging/adapters/memory.rb]
62
79
 
63
80
  ## Designing apps
64
81
 
@@ -71,6 +88,9 @@ There are only two hard problems in distributed systems:
71
88
  2. Exactly-once delivery
72
89
  ```
73
90
 
91
+
92
+ [Messaging API specification format](https://github.com/kukushkin/mimi-messaging-spec)
93
+
74
94
  ## License
75
95
 
76
96
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -95,7 +95,7 @@ For commands and queries, the target of the message consists of a queue name
95
95
  and a method name (e.g. `"customers/create"`).
96
96
 
97
97
  For events, the target of the message consists of a topic name and an
98
- event type (e.g. `"customers/created"`).
98
+ event type (e.g. `"customers#created"`).
99
99
 
100
100
  This allows to model the communication around your business domain concepts,
101
101
  and not the implementation details like application or host names.
@@ -1,6 +1,4 @@
1
- # Why HTTP is a bad choice for interservice communication
2
-
3
- [WIP]
1
+ # [WIP] Why HTTP is a bad choice for interservice communication
4
2
 
5
3
  Downsides of HTTP:
6
4
  * inherently synchronous
@@ -17,4 +15,6 @@ Downsides of HTTP:
17
15
 
18
16
  Pro's of HTTP:
19
17
  * synchronous communication is simple
20
- * HTTP as technology is well known by engineers
18
+ * HTTP as technology is well known by engineers
19
+ * more stable and simpler to setup if the services are not closely deployed (e.g. in different datacenters/regions)
20
+
@@ -15,22 +15,24 @@ module Mimi
15
15
  #
16
16
  module Messaging
17
17
  # Request target validation pattern:
18
- # "[<name>.][...]<name>/<name>"
19
- # Where <name> consists of valid identifier characters: A-Za-z0-9_
18
+ # "[<name>.][...]<name>/<identifier>"
19
+ # Where <name> consists of characters: A-Za-z0-9_-
20
+ # and <method_name> can be any of: A-Za-z0-9_
20
21
  #
21
22
  # Example:
22
23
  # "shop.orders/list"
23
24
  #
24
- REQUEST_TARGET_REGEX = %r{^((\w+)\.)*(\w+)\/(\w+)$}.freeze
25
+ REQUEST_TARGET_REGEX = %r{^([\w\-]+\.)*([\w\-]+)\/(\w+)$}.freeze
25
26
 
26
27
  # Event target validation pattern:
27
- # "[<name>.][...]<name>#<name>"
28
- # Where <name> consists of valid identifier characters: A-Za-z0-9_
28
+ # "[<name>.][...]<name>#<identifier>"
29
+ # Where <name> consists of characters: A-Za-z0-9_-
30
+ # and <method_name> can be any of: A-Za-z0-9_
29
31
  #
30
32
  # Example:
31
33
  # "shop.orders#created"
32
34
  #
33
- EVENT_TARGET_REGEX = %r{^((\w+)\.)*(\w+)\#(\w+)$}.freeze
35
+ EVENT_TARGET_REGEX = %r{^([\w\-]+\.)*([\w\-]+)\#(\w+)$}.freeze
34
36
 
35
37
  # By default Mimi::Messaging logs at given level
36
38
  DEFAULT_LOG_AT_LEVEL = :info
@@ -348,7 +350,7 @@ module Mimi
348
350
  end
349
351
 
350
352
  message_processor_params = {
351
- type: :event,
353
+ type: :event_with_queue,
352
354
  topic_name: topic_name,
353
355
  queue_name: queue_name,
354
356
  processor: processor,
@@ -450,24 +452,27 @@ module Mimi
450
452
  end
451
453
  private_class_method :start_message_processor
452
454
 
453
- # Starts (registers) all message processors
455
+ # Starts all registered message processors at the adapter
454
456
  #
455
457
  def self.start_all_message_processors
456
458
  message_processors.each { |p| start_message_processor(p) }
457
459
  end
458
460
  private_class_method :start_all_message_processors
459
461
 
460
- # Stops (deregisters) all message processors
462
+ # Stops all registered message processors at the adapter
461
463
  #
462
464
  def self.stop_all_processors
463
465
  log "#{self} stopping all message processors"
464
466
  adapter.stop_all_processors
467
+ message_processors.each { |p| p[:started] = false }
465
468
  end
466
469
  private_class_method :stop_all_processors
467
470
 
468
- # Resets the internal state, private
471
+ # Deregisters all message processors
469
472
  #
470
- def self.reset
473
+ def self.unregister_all_processors
474
+ stop_all_processors
475
+ message_processors.replace([])
471
476
  end
472
477
  end # module Messaging
473
478
  end # module Mimi
@@ -117,7 +117,7 @@ module Mimi
117
117
  serialize(response)
118
118
  end
119
119
 
120
- def dispatch_event(target, message_serialized, _opts = {})
120
+ def dispatch_event(target, message, _opts = {})
121
121
  topic_name, event_type = target.split("#")
122
122
  processors = event_processors[topic_name] || []
123
123
  processor_queues = event_processors_with_queue[topic_name] || {}
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Mimi
4
4
  module Messaging
5
- VERSION = "1.2.2"
5
+ VERSION = "1.2.8"
6
6
  end
7
7
  end
@@ -36,6 +36,6 @@ Gem::Specification.new do |spec|
36
36
 
37
37
  spec.add_development_dependency "bundler", "~> 2.0"
38
38
  spec.add_development_dependency "pry", "~> 0.12"
39
- spec.add_development_dependency "rake", "~> 10.0"
39
+ spec.add_development_dependency "rake", "~> 13.0"
40
40
  spec.add_development_dependency "rspec", "~> 3.0"
41
41
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mimi-messaging
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Kukushkin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-09 00:00:00.000000000 Z
11
+ date: 2021-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mimi-core
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '10.0'
61
+ version: '13.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '10.0'
68
+ version: '13.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -145,8 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
145
  - !ruby/object:Gem::Version
146
146
  version: '0'
147
147
  requirements: []
148
- rubyforge_project:
149
- rubygems_version: 2.6.14.4
148
+ rubygems_version: 3.1.2
150
149
  signing_key:
151
150
  specification_version: 4
152
151
  summary: Interservice communication via message bus for microservices