beetle 0.1 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +18 -8
- data/beetle.gemspec +37 -121
- data/bin/beetle +9 -0
- data/examples/README.rdoc +0 -2
- data/examples/rpc.rb +3 -2
- data/ext/mkrf_conf.rb +19 -0
- data/lib/beetle.rb +2 -2
- data/lib/beetle/base.rb +1 -8
- data/lib/beetle/client.rb +16 -14
- data/lib/beetle/commands.rb +30 -0
- data/lib/beetle/commands/configuration_client.rb +73 -0
- data/lib/beetle/commands/configuration_server.rb +85 -0
- data/lib/beetle/configuration.rb +70 -7
- data/lib/beetle/deduplication_store.rb +50 -38
- data/lib/beetle/handler.rb +2 -5
- data/lib/beetle/logging.rb +7 -0
- data/lib/beetle/message.rb +11 -13
- data/lib/beetle/publisher.rb +12 -4
- data/lib/beetle/r_c.rb +2 -1
- data/lib/beetle/redis_configuration_client.rb +136 -0
- data/lib/beetle/redis_configuration_server.rb +301 -0
- data/lib/beetle/redis_ext.rb +79 -0
- data/lib/beetle/redis_master_file.rb +35 -0
- data/lib/beetle/redis_server_info.rb +65 -0
- data/lib/beetle/subscriber.rb +4 -1
- data/test/beetle/configuration_test.rb +14 -2
- data/test/beetle/deduplication_store_test.rb +61 -43
- data/test/beetle/message_test.rb +28 -4
- data/test/beetle/publisher_test.rb +17 -3
- data/test/beetle/redis_configuration_client_test.rb +97 -0
- data/test/beetle/redis_configuration_server_test.rb +278 -0
- data/test/beetle/redis_ext_test.rb +71 -0
- data/test/beetle/redis_master_file_test.rb +39 -0
- data/test/test_helper.rb +13 -1
- metadata +162 -69
- data/.gitignore +0 -5
- data/MIT-LICENSE +0 -20
- data/Rakefile +0 -114
- data/TODO +0 -7
- data/etc/redis-master.conf +0 -189
- data/etc/redis-slave.conf +0 -189
- data/examples/redis_failover.rb +0 -65
- data/script/start_rabbit +0 -29
- data/snafu.rb +0 -55
- data/test/beetle.yml +0 -81
- data/test/beetle/bla.rb +0 -0
- data/tmp/master/.gitignore +0 -2
- data/tmp/slave/.gitignore +0 -3
data/script/start_rabbit
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
#!/bin/bash
|
2
|
-
|
3
|
-
# export RABBITMQ_MNESIA_BASE=/var/lib/rabbitmq/mnesia2
|
4
|
-
# Defaults to /var/lib/rabbitmq/mnesia. Set this to the directory where Mnesia
|
5
|
-
# database files should be placed.
|
6
|
-
|
7
|
-
# export RABBITMQ_LOG_BASE
|
8
|
-
# Defaults to /var/log/rabbitmq. Log files generated by the server will be placed
|
9
|
-
# in this directory.
|
10
|
-
|
11
|
-
export RABBITMQ_NODENAME=$1
|
12
|
-
# Defaults to rabbit. This can be useful if you want to run more than one node
|
13
|
-
# per machine - RABBITMQ_NODENAME should be unique per erlang-node-and-machine
|
14
|
-
# combination. See clustering on a single machine guide at <http://www.rab-
|
15
|
-
# bitmq.com/clustering.html#single-machine> for details.
|
16
|
-
|
17
|
-
# RABBITMQ_NODE_IP_ADDRESS
|
18
|
-
# Defaults to 0.0.0.0. This can be changed if you only want to bind to one net-
|
19
|
-
# work interface.
|
20
|
-
|
21
|
-
export RABBITMQ_NODE_PORT=$2
|
22
|
-
# Defaults to 5672.
|
23
|
-
|
24
|
-
# RABBITMQ_CLUSTER_CONFIG_FILE
|
25
|
-
# Defaults to /etc/rabbitmq/rabbitmq_cluster.config. If this file is present it
|
26
|
-
# is used by the server to auto-configure a RabbitMQ cluster. See the clustering
|
27
|
-
# guide at <http://www.rabbitmq.com/clustering.html> for details.
|
28
|
-
|
29
|
-
rabbitmq-server
|
data/snafu.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
# The simplest case
|
2
|
-
client.register_message(:something_happened) # => key: something_happened
|
3
|
-
|
4
|
-
# with options
|
5
|
-
client.register_message(:
|
6
|
-
|
7
|
-
####################
|
8
|
-
# Message Grouping #
|
9
|
-
####################
|
10
|
-
|
11
|
-
client.register_message(:delete_something, :group => :jobs) # => key: jobs.delete_something
|
12
|
-
client.register_message(:create_something, :group => :jobs) # => key: jobs.create_something
|
13
|
-
|
14
|
-
# You can register a handler for a message group
|
15
|
-
client.register_handler(JobsHandler, :group => :jobs) # bind queue with: jobs.*
|
16
|
-
|
17
|
-
# And still register on single messages
|
18
|
-
client.register_handler(DeletedJobHandler, :delete_something) # bind queue with: *.delete_something
|
19
|
-
|
20
|
-
######################
|
21
|
-
# Handler Definition #
|
22
|
-
######################
|
23
|
-
|
24
|
-
# With a Handler class that implements .process(message)
|
25
|
-
client.register_handler(MyProcessor, :something_happened) # => queue: my_processor
|
26
|
-
|
27
|
-
# With a String / Symbol and a block
|
28
|
-
client.register_handler("Other Processor", :delete_something, :something_happened) lambda { |message| foobar(message) } # => queue: other_processor, bound with: *.delete_something and *.something_happened
|
29
|
-
|
30
|
-
# With extra parameters
|
31
|
-
client.register_handler(VeryImportant, :delete_something, :immediate => true) # queue: very_important, :immediate => true
|
32
|
-
|
33
|
-
###################################
|
34
|
-
# Wiring, Subscribing, Publishing #
|
35
|
-
###################################
|
36
|
-
client.wire! # => all the binding magic happens
|
37
|
-
|
38
|
-
client.subscribe
|
39
|
-
|
40
|
-
client.publish(:delete_something, 'payload')
|
41
|
-
|
42
|
-
__END__
|
43
|
-
|
44
|
-
Whats happening when wire! is called? (pseudocode)
|
45
|
-
1. all the messages are registered
|
46
|
-
messages = [{:name => :delete_something, :group => :jobs, :bound => false}, {:name => :something_happened, :bound => false}]
|
47
|
-
2. all the queues for the handlers are created and bound...
|
48
|
-
my_processor_queue = queue(:my_processor).bind(exchange, :key => '*.something_happened')
|
49
|
-
jobs_handler_queue = queue(:jobs_handler).bind(exchange, :key => 'jobs.*')
|
50
|
-
handlers_with_queues = [[jobs_handler_queue, JobsHandler], [my_processor_queue, block_or_class]]
|
51
|
-
3. every handler definition binds a queue for the handler to a list of messages and marks the message as bound.
|
52
|
-
4. If in the end a message isn't bound to a queue at least once, an exception is raised
|
53
|
-
|
54
|
-
Exceptions will be thrown if:
|
55
|
-
* after all m
|
data/test/beetle.yml
DELETED
@@ -1,81 +0,0 @@
|
|
1
|
-
# list all standard exchanges used by the main xing app, along with their options for declaration
|
2
|
-
# used by producers and consumers
|
3
|
-
exchanges:
|
4
|
-
test:
|
5
|
-
type: "topic"
|
6
|
-
durable: true
|
7
|
-
deadletter:
|
8
|
-
type: "topic"
|
9
|
-
durable: true
|
10
|
-
redundant:
|
11
|
-
type: "topic"
|
12
|
-
durable: true
|
13
|
-
|
14
|
-
# list all standard queues along with their binding declaration
|
15
|
-
# this section is only used by consumers
|
16
|
-
queues:
|
17
|
-
test: # binding options
|
18
|
-
exchange: "test" # Bandersnatch default is the name of the queue
|
19
|
-
passive: false # amqp default is false
|
20
|
-
durable: true # amqp default is false
|
21
|
-
exclusive: false # amqp default is false
|
22
|
-
auto_delete: false # amqp default is false
|
23
|
-
nowait: true # amqp default is true
|
24
|
-
key: "#" # listen to every message
|
25
|
-
deadletter:
|
26
|
-
exchange: "deadletter"
|
27
|
-
durable: true
|
28
|
-
key: "#"
|
29
|
-
redundant:
|
30
|
-
exchange: "redundant"
|
31
|
-
durable: true
|
32
|
-
key: "#"
|
33
|
-
additional_queue:
|
34
|
-
exchange: "redundant"
|
35
|
-
durable: true
|
36
|
-
key: "#"
|
37
|
-
|
38
|
-
# list all messages we can publish
|
39
|
-
messages:
|
40
|
-
test:
|
41
|
-
queue: "test"
|
42
|
-
# Spefify the queue for listeners (default is message name)
|
43
|
-
key: "test"
|
44
|
-
# Specifies the routing key pattern for message subscription.
|
45
|
-
ttl: <%= 1.hour %>
|
46
|
-
# Specifies the time interval after which messages are silently dropped (seconds)
|
47
|
-
mandatory: true
|
48
|
-
# default is false
|
49
|
-
# Tells the server how to react if the message
|
50
|
-
# cannot be routed to a queue. If set to _true_, the server will return an unroutable message
|
51
|
-
# with a Return method. If this flag is zero, the server silently drops the message.
|
52
|
-
immediate: false
|
53
|
-
# default is false
|
54
|
-
# Tells the server how to react if the message
|
55
|
-
# cannot be routed to a queue consumer immediately. If set to _true_, the server will return an
|
56
|
-
# undeliverable message with a Return method. If set to _false_, the server will queue the message,
|
57
|
-
# but with no guarantee that it will ever be consumed.
|
58
|
-
persistent: true
|
59
|
-
# default is false
|
60
|
-
# Tells the server whether to persist the message
|
61
|
-
# If set to _true_, the message will be persisted to disk and not lost if the server restarts.
|
62
|
-
# If set to _false_, the message will not be persisted across server restart. Setting to _true_
|
63
|
-
# incurs a performance penalty as there is an extra cost associated with disk access.
|
64
|
-
deadletter:
|
65
|
-
key: "deadletter"
|
66
|
-
persistent: true
|
67
|
-
redundant:
|
68
|
-
key: "redundant"
|
69
|
-
persistent: true
|
70
|
-
redundant: true
|
71
|
-
|
72
|
-
development: &development
|
73
|
-
hostname: localhost:5672, localhost:5673
|
74
|
-
# hostname: localhost:5672
|
75
|
-
msg_id_store:
|
76
|
-
host: localhost
|
77
|
-
db: 4
|
78
|
-
|
79
|
-
test:
|
80
|
-
<<: *development
|
81
|
-
hostname: localhost:5672
|
data/test/beetle/bla.rb
DELETED
File without changes
|
data/tmp/master/.gitignore
DELETED
data/tmp/slave/.gitignore
DELETED