Class: Ap4r::StoredMessage
- Defined in:
- lib/ap4r/stored_message.rb
Overview
This class is the model class for SAF(store and foward). The migration file is located at following path,
ap4r/lib/ap4r/xxx_create_table_for_saf.rb
Don’t forget to create table, before use SAF.
Constant Summary collapse
- STATUS_STORED =
0
- STATUS_FORWARDED =
1
- STATUS_FAILED =
-1
- PHYSICAL =
:physical
- LOGICAL =
:logical
Class Method Summary collapse
-
.destroy_if_exists(id, options) ⇒ Object
Destroy a record by id.
-
.store(queue_name, queue_message, rm_options = {}) ⇒ Object
Insert queue information, such as queue name and message, for next logic.
Instance Method Summary collapse
Class Method Details
.destroy_if_exists(id, options) ⇒ Object
Destroy a record by id. Some options are supported.
-
:delete_mode (:physical or :logical)
Default delete mmode is physical. If you need logical delete, for example you neeed checking message duplication etc, Set the instance variable appropriately.
63 64 65 66 67 68 69 70 71 72 |
# File 'lib/ap4r/stored_message.rb', line 63 def self.destroy_if_exists(id, ) result = nil begin result = StoredMessage.find(id) rescue ActiveRecord::RecordNotFound # There are chances that othere thread or process already forwarded. return nil end result.destroy_or_update() end |
.store(queue_name, queue_message, rm_options = {}) ⇒ Object
Insert queue information, such as queue name and message, for next logic.
duplication_check_id is generated from UUID and should be unique in all records of StoreMessages. So, using this id, it’s possible to protect to execute same asynchronous processing by same message. But by default, record of StoreMessages is removed after putting a message into queue completed.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/ap4r/stored_message.rb', line 40 def self.store(queue_name, , = {}) sm = StoredMessage.new do |s| s.duplication_check_id = UUID.new s.queue = queue_name s.status = STATUS_STORED s.object = Marshal::dump() s.headers = Marshal::dump() end begin sm.save! rescue Exception => error raise error end sm end |
Instance Method Details
#destroy_or_update(options = {:delete_mode => PHYSICAL}) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/ap4r/stored_message.rb', line 74 def destroy_or_update( = {:delete_mode => PHYSICAL}) case [:delete_mode] when PHYSICAL # TODO: Confirm to raise error, 2006/10/17 kato-k self.destroy when LOGICAL self.status = STATUS_FORWARDED self.save! else raise "unknown delete mode: #{[:delete_mode]}" end self end |