moleculer 0.1.0
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 +7 -0
- data/.gitignore +14 -0
- data/.rspec +3 -0
- data/.rubocop.yml +44 -0
- data/.travis.yml +23 -0
- data/.yardopts +1 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +57 -0
- data/LICENSE.txt +21 -0
- data/README.md +59 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/examples/benchmark_server.rb +21 -0
- data/examples/client-server/client.rb +13 -0
- data/examples/client-server/server.rb +25 -0
- data/lib/moleculer/broker.rb +318 -0
- data/lib/moleculer/configuration.rb +109 -0
- data/lib/moleculer/context.rb +24 -0
- data/lib/moleculer/errors/action_not_found.rb +6 -0
- data/lib/moleculer/errors/invalid_action_response.rb +11 -0
- data/lib/moleculer/errors/local_node_already_registered.rb +6 -0
- data/lib/moleculer/errors/node_not_found.rb +6 -0
- data/lib/moleculer/errors/transporter_already_started.rb +6 -0
- data/lib/moleculer/node.rb +105 -0
- data/lib/moleculer/packets/base.rb +47 -0
- data/lib/moleculer/packets/disconnect.rb +10 -0
- data/lib/moleculer/packets/discover.rb +10 -0
- data/lib/moleculer/packets/event.rb +37 -0
- data/lib/moleculer/packets/heartbeat.rb +18 -0
- data/lib/moleculer/packets/info.rb +97 -0
- data/lib/moleculer/packets/req.rb +57 -0
- data/lib/moleculer/packets/res.rb +43 -0
- data/lib/moleculer/packets.rb +25 -0
- data/lib/moleculer/registry.rb +325 -0
- data/lib/moleculer/serializers/json.rb +23 -0
- data/lib/moleculer/serializers.rb +10 -0
- data/lib/moleculer/service/action.rb +60 -0
- data/lib/moleculer/service/base.rb +117 -0
- data/lib/moleculer/service/event.rb +50 -0
- data/lib/moleculer/service/remote.rb +80 -0
- data/lib/moleculer/service.rb +2 -0
- data/lib/moleculer/support/hash_util.rb +48 -0
- data/lib/moleculer/support/log_proxy.rb +67 -0
- data/lib/moleculer/support/open_struct.rb +15 -0
- data/lib/moleculer/support/string_util.rb +25 -0
- data/lib/moleculer/support.rb +4 -0
- data/lib/moleculer/transporters/redis.rb +207 -0
- data/lib/moleculer/transporters.rb +22 -0
- data/lib/moleculer/version.rb +3 -0
- data/lib/moleculer.rb +103 -0
- data/moleculer.gemspec +50 -0
- metadata +238 -0
data/lib/moleculer.rb
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
require "concurrent"
|
2
|
+
require "securerandom"
|
3
|
+
require "socket"
|
4
|
+
require "ougai"
|
5
|
+
|
6
|
+
require "moleculer/broker"
|
7
|
+
require "moleculer/context"
|
8
|
+
require "moleculer/service"
|
9
|
+
require "moleculer/support"
|
10
|
+
require "moleculer/version"
|
11
|
+
require "moleculer/node"
|
12
|
+
require "moleculer/serializers"
|
13
|
+
require "moleculer/packets"
|
14
|
+
require "moleculer/configuration"
|
15
|
+
|
16
|
+
# Moleculer is a fast, modern and powerful microservices framework for originally written for
|
17
|
+
# {Node.js}[https://nodejs.org/en/]. It helps you to build efficient, reliable & scalable services. Moleculer provides
|
18
|
+
# many features for building and managing your microservices.
|
19
|
+
#
|
20
|
+
# This is a Ruby port of the Moleculer protocol, allowing a seamless mesh between NodeJS service nodes, Ruby service
|
21
|
+
# nodes, and nodes in other
|
22
|
+
# {supported languages}[https://github.com/moleculerjs/awesome-moleculer#polyglot-implementations].
|
23
|
+
module Moleculer
|
24
|
+
extend self
|
25
|
+
PROTOCOL_VERSION = "3".freeze
|
26
|
+
|
27
|
+
# @return [Symbol] the service prefix. When used will prefix all services name with `<service_prefix>.`, defaults
|
28
|
+
# to `nil`
|
29
|
+
attr_accessor :service_prefix
|
30
|
+
|
31
|
+
##
|
32
|
+
# @!attribute broker [r]
|
33
|
+
#
|
34
|
+
# @return [Moleculer::Broker] the Moleculer Broker instance. Only one broker can exist per node.
|
35
|
+
def broker
|
36
|
+
@broker ||= Broker.new(config)
|
37
|
+
end
|
38
|
+
|
39
|
+
##
|
40
|
+
# Calls the given action. This method will block until the timeout is hit (default 5 seconds) or the action returns
|
41
|
+
# a response
|
42
|
+
#
|
43
|
+
# @param action [Symbol] the name of the action to call
|
44
|
+
# @param params [Hash] params to pass to the action
|
45
|
+
# @param kwargs [Hash] call options (see Moleculer::Broker#call)
|
46
|
+
#
|
47
|
+
# @return [Hash] the request response
|
48
|
+
def call(action, params = {}, **kwargs)
|
49
|
+
return broker.call(action.to_s, kwargs) if params.empty?
|
50
|
+
|
51
|
+
broker.call(action.to_s, params, kwargs)
|
52
|
+
end
|
53
|
+
|
54
|
+
def config
|
55
|
+
@config ||= Configuration.new
|
56
|
+
end
|
57
|
+
|
58
|
+
##
|
59
|
+
# Allows configuration of moleculer. For more information on configuration see the [Readme](/index.html)
|
60
|
+
#
|
61
|
+
# @yield [self]
|
62
|
+
def configure
|
63
|
+
yield config
|
64
|
+
end
|
65
|
+
|
66
|
+
##
|
67
|
+
# Emits the given event to the Moleculer network.
|
68
|
+
#
|
69
|
+
# @param event [String] the name of the event
|
70
|
+
# @param data [Hash] the data related to the event
|
71
|
+
def emit(event, data)
|
72
|
+
broker.emit(event, data)
|
73
|
+
end
|
74
|
+
|
75
|
+
##
|
76
|
+
# Runs the moleculer broker. This is synchronous and blocks.
|
77
|
+
def run
|
78
|
+
broker.run
|
79
|
+
end
|
80
|
+
|
81
|
+
##
|
82
|
+
# Starts the moleculer broker. This is asynchronous and does not block.
|
83
|
+
def start
|
84
|
+
broker.start
|
85
|
+
end
|
86
|
+
|
87
|
+
##
|
88
|
+
# Stops the moleculer broker.
|
89
|
+
def stop
|
90
|
+
broker.stop
|
91
|
+
end
|
92
|
+
|
93
|
+
##
|
94
|
+
# Blocks the processes until the requested services have been registered on the network.
|
95
|
+
#
|
96
|
+
# @param services [Array<String>] a list of service to wait for.
|
97
|
+
#
|
98
|
+
# @example
|
99
|
+
# Moleculer.wait_for_services("some.service", "someother.service")
|
100
|
+
def wait_for_services(*services)
|
101
|
+
broker.wait_for_services(*services)
|
102
|
+
end
|
103
|
+
end
|
data/moleculer.gemspec
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require "moleculer/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "moleculer"
|
8
|
+
spec.version = Moleculer::VERSION
|
9
|
+
spec.authors = ["fugufish"]
|
10
|
+
spec.email = ["therealfugu@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{This is a Ruby implementation of the Moleculer framework.}
|
13
|
+
spec.description = %q{This is a Ruby implementation of the Moleculer framework.}
|
14
|
+
spec.homepage = "https://github.com/moleculer-ruby/moleculer"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
18
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
19
|
+
if spec.respond_to?(:metadata)
|
20
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
21
|
+
|
22
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
23
|
+
# spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
|
24
|
+
# spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
|
25
|
+
else
|
26
|
+
raise "RubyGems 2.0 or newer is required to protect against " \
|
27
|
+
"public gem pushes."
|
28
|
+
end
|
29
|
+
|
30
|
+
# Specify which files should be added to the gem when it is released.
|
31
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
32
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
33
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
34
|
+
end
|
35
|
+
spec.bindir = "exe"
|
36
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
37
|
+
spec.require_paths = ["lib"]
|
38
|
+
|
39
|
+
spec.add_dependency "concurrent-ruby", "~> 1.0"
|
40
|
+
spec.add_dependency "ougai", "~> 1.7"
|
41
|
+
spec.add_dependency "awesome_print", "~> 1.8"
|
42
|
+
|
43
|
+
spec.add_development_dependency "bundler", "~> 1.16"
|
44
|
+
spec.add_development_dependency "yard", "~> 0.9.11"
|
45
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
46
|
+
spec.add_development_dependency "redis", "~> 4.0"
|
47
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
48
|
+
spec.add_development_dependency "simplecov", "~> 0.16"
|
49
|
+
spec.add_development_dependency "timecop", "~> 0.9.1"
|
50
|
+
end
|
metadata
ADDED
@@ -0,0 +1,238 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: moleculer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- fugufish
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-04-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: concurrent-ruby
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: ougai
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.7'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.7'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: awesome_print
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.8'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.8'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.16'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.16'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: yard
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.9.11
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.9.11
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '10.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '10.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: redis
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '4.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '4.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rspec
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '3.0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '3.0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: simplecov
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0.16'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0.16'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: timecop
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 0.9.1
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 0.9.1
|
153
|
+
description: This is a Ruby implementation of the Moleculer framework.
|
154
|
+
email:
|
155
|
+
- therealfugu@gmail.com
|
156
|
+
executables: []
|
157
|
+
extensions: []
|
158
|
+
extra_rdoc_files: []
|
159
|
+
files:
|
160
|
+
- ".gitignore"
|
161
|
+
- ".rspec"
|
162
|
+
- ".rubocop.yml"
|
163
|
+
- ".travis.yml"
|
164
|
+
- ".yardopts"
|
165
|
+
- CODE_OF_CONDUCT.md
|
166
|
+
- Gemfile
|
167
|
+
- Gemfile.lock
|
168
|
+
- LICENSE.txt
|
169
|
+
- README.md
|
170
|
+
- Rakefile
|
171
|
+
- bin/console
|
172
|
+
- bin/setup
|
173
|
+
- examples/benchmark_server.rb
|
174
|
+
- examples/client-server/client.rb
|
175
|
+
- examples/client-server/server.rb
|
176
|
+
- lib/moleculer.rb
|
177
|
+
- lib/moleculer/broker.rb
|
178
|
+
- lib/moleculer/configuration.rb
|
179
|
+
- lib/moleculer/context.rb
|
180
|
+
- lib/moleculer/errors/action_not_found.rb
|
181
|
+
- lib/moleculer/errors/invalid_action_response.rb
|
182
|
+
- lib/moleculer/errors/local_node_already_registered.rb
|
183
|
+
- lib/moleculer/errors/node_not_found.rb
|
184
|
+
- lib/moleculer/errors/transporter_already_started.rb
|
185
|
+
- lib/moleculer/node.rb
|
186
|
+
- lib/moleculer/packets.rb
|
187
|
+
- lib/moleculer/packets/base.rb
|
188
|
+
- lib/moleculer/packets/disconnect.rb
|
189
|
+
- lib/moleculer/packets/discover.rb
|
190
|
+
- lib/moleculer/packets/event.rb
|
191
|
+
- lib/moleculer/packets/heartbeat.rb
|
192
|
+
- lib/moleculer/packets/info.rb
|
193
|
+
- lib/moleculer/packets/req.rb
|
194
|
+
- lib/moleculer/packets/res.rb
|
195
|
+
- lib/moleculer/registry.rb
|
196
|
+
- lib/moleculer/serializers.rb
|
197
|
+
- lib/moleculer/serializers/json.rb
|
198
|
+
- lib/moleculer/service.rb
|
199
|
+
- lib/moleculer/service/action.rb
|
200
|
+
- lib/moleculer/service/base.rb
|
201
|
+
- lib/moleculer/service/event.rb
|
202
|
+
- lib/moleculer/service/remote.rb
|
203
|
+
- lib/moleculer/support.rb
|
204
|
+
- lib/moleculer/support/hash_util.rb
|
205
|
+
- lib/moleculer/support/log_proxy.rb
|
206
|
+
- lib/moleculer/support/open_struct.rb
|
207
|
+
- lib/moleculer/support/string_util.rb
|
208
|
+
- lib/moleculer/transporters.rb
|
209
|
+
- lib/moleculer/transporters/redis.rb
|
210
|
+
- lib/moleculer/version.rb
|
211
|
+
- moleculer.gemspec
|
212
|
+
homepage: https://github.com/moleculer-ruby/moleculer
|
213
|
+
licenses:
|
214
|
+
- MIT
|
215
|
+
metadata:
|
216
|
+
allowed_push_host: https://rubygems.org
|
217
|
+
homepage_uri: https://github.com/moleculer-ruby/moleculer
|
218
|
+
post_install_message:
|
219
|
+
rdoc_options: []
|
220
|
+
require_paths:
|
221
|
+
- lib
|
222
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
223
|
+
requirements:
|
224
|
+
- - ">="
|
225
|
+
- !ruby/object:Gem::Version
|
226
|
+
version: '0'
|
227
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
228
|
+
requirements:
|
229
|
+
- - ">="
|
230
|
+
- !ruby/object:Gem::Version
|
231
|
+
version: '0'
|
232
|
+
requirements: []
|
233
|
+
rubyforge_project:
|
234
|
+
rubygems_version: 2.7.7
|
235
|
+
signing_key:
|
236
|
+
specification_version: 4
|
237
|
+
summary: This is a Ruby implementation of the Moleculer framework.
|
238
|
+
test_files: []
|