class Qpid::Proton::Message
Messsage data and headers that can sent or received on a {Link}
{#body} is the main message content. {#properties} is a {Hash} of extra properties that can be attached to the message.
@example Create a message containing a Unicode string
msg = Qpid::Proton::Message.new "this is a string"
@example Create a message containing binary data
msg = Qpid::Proton::Message.new msg.body = Qpid::Proton::BinaryString.new(File.binread("/home/qpid/binfile.tar.gz"))
Constants
- PROTON_METHOD_PREFIX
@private
Attributes
@return [Hash] Delivery
annotations for this message.
@return [Object] body of the message.
@return [Hash] Delivery
instructions for this message.
@return [Hash] Application properties for the message
Public Class Methods
Creates a new Message
instance. @param body the body of the message, equivalent to calling m.body=(body) @param opts [Hash] additional options, equivalent to +Message#key=value+ for each +key=>value+
# File lib/core/message.rb, line 85 def initialize(body = nil, opts={}) @impl = Cproton.pn_message ObjectSpace.define_finalizer(self, self.class.finalize!(@impl)) @properties = {} @instructions = {} @annotations = {} @body = nil self.body = body unless body.nil? if !opts.nil? then opts.each do |k, v| setter = (k.to_s+"=").to_sym() self.send setter, v end end end
Public Instance Methods
Equivalent to +#properties+
# File lib/core/message.rb, line 490 def [](name) @properties[name]; end
Equivalent to +#properties = value+
# File lib/core/message.rb, line 487 def []=(name, value) @properties[name] = value; end
Clears the state of the Message
. This allows a single instance of Message
to be reused.
# File lib/core/message.rb, line 117 def clear Cproton.pn_message_clear(@impl) @properties.clear unless @properties.nil? @instructions.clear unless @instructions.nil? @annotations.clear unless @annotations.nil? @body = nil end
@deprecated use {#body}
# File lib/core/message.rb, line 366 def content deprecated __method__, "body" size = 16 loop do result = Cproton.pn_message_save(@impl, size) error = result[0] data = result[1] if error == Qpid::Proton::Error::OVERFLOW size = size * 2 else check(error) return data end end end
@deprecated use {#body=}
# File lib/core/message.rb, line 360 def content=(content) deprecated __method__, "body=" Cproton.pn_message_load(@impl, content) end
Returns the content encoding type.
# File lib/core/message.rb, line 394 def content_encoding Cproton.pn_message_get_content_encoding(@impl) end
Returns the content type
# File lib/core/message.rb, line 355 def content_type Cproton.pn_message_get_content_type(@impl) end
Sets the content type.
Options¶ ↑
-
content_type
- the content type
# File lib/core/message.rb, line 349 def content_type=(content_type) Cproton.pn_message_set_content_type(@impl, content_type) end
Returns the correlation id.
# File lib/core/message.rb, line 339 def correlation_id Cproton.pn_message_get_correlation_id(@impl) end
Returns the creation time.
# File lib/core/message.rb, line 430 def creation_time Cproton.pn_message_get_creation_time(@impl) end
Decodes a message from AMQP binary data. @param encoded [String] the encoded bytes @return the number of bytes consumed
# File lib/core/message.rb, line 44 def decode(encoded) check(Cproton.pn_message_decode(@impl, encoded, encoded.length)) post_decode end
Equivalent to +{#properties}.delete(name)+
# File lib/core/message.rb, line 493 def delete_property(name) @properties.delete(name); end
Returns the delivery count for the message.
This is the number of delivery attempts for the given message.
# File lib/core/message.rb, line 239 def delivery_count Cproton.pn_message_get_delivery_count(@impl) end
Sets the delivery count for the message.
See ::delivery_count for more details.
Options¶ ↑
-
count - the delivery count
# File lib/core/message.rb, line 229 def delivery_count=(count) raise ::ArgumentError.new("invalid count: #{count}") if not count.is_a?(Numeric) raise RangeError.new("count out of range: #{count}") if count < 0 Cproton.pn_message_set_delivery_count(@impl, count.floor) end
Returns the durable property.
The durable property indicates that the emessage should be held durably by any intermediaries taking responsibility for the message.
Examples¶ ↑
msg = Qpid::Proton::Message.new msg.durable = true
# File lib/core/message.rb, line 166 def durable Cproton.pn_message_is_durable(@impl) end
Encodes the message.
# File lib/core/message.rb, line 59 def encode pre_encode size = 16 loop do error, data = Cproton::pn_message_encode(@impl, size) if error == Qpid::Proton::Error::OVERFLOW size *= 2 else check(error) return data end end end
Returns the most recent error number.
# File lib/core/message.rb, line 127 def errno Cproton.pn_message_errno(@impl) end
Returns the most recent error message.
# File lib/core/message.rb, line 133 def error Cproton.pn_error_text(Cproton.pn_message_error(@impl)) end
Returns whether there is currently an error reported.
# File lib/core/message.rb, line 139 def error? !Cproton.pn_message_errno(@impl).zero? end
Returns the expiration time.
# File lib/core/message.rb, line 412 def expires Cproton.pn_message_get_expiry_time(@impl) end
Sets the expiration time.
Options¶ ↑
-
time - the expiry time
# File lib/core/message.rb, line 404 def expires=(time) raise TypeError.new("invalid expiry time: #{time}") if time.nil? raise ::ArgumentError.new("expiry time cannot be negative: #{time}") if time < 0 Cproton.pn_message_set_expiry_time(@impl, time) end
Sets whether this is the first time the message was acquired.
See ::first_acquirer? for more details.
Options¶ ↑
-
state - true if claiming the message
# File lib/core/message.rb, line 216 def first_acquirer=(state) raise TypeError.new("invalid state: #{state}") if state.nil? || !([TrueClass, FalseClass].include?(state.class)) Cproton.pn_message_set_first_acquirer(@impl, state) end
Returns whether this is the first acquirer.
# File lib/core/message.rb, line 246 def first_acquirer? Cproton.pn_message_is_first_acquirer(@impl) end
Returns the group id.
# File lib/core/message.rb, line 446 def group_id Cproton.pn_message_get_group_id(@impl) end
Returns the group sequence number.
# File lib/core/message.rb, line 463 def group_sequence Cproton.pn_message_get_group_sequence(@impl) end
Returns the message id.
# File lib/core/message.rb, line 262 def id Cproton.pn_message_get_id(@impl) end
Qpid::Proton::Util::Wrapper#inspect
# File lib/core/message.rb, line 504 def inspect() pre_encode; super; end
@private
# File lib/core/message.rb, line 50 def post_decode # decode elements from the message @properties = Codec::Data.to_object(Cproton::pn_message_properties(@impl)) || {} @instructions = Codec:: Data.to_object(Cproton::pn_message_instructions(@impl)) || {} @annotations = Codec::Data.to_object(Cproton::pn_message_annotations(@impl)) || {} @body = Codec::Data.to_object(Cproton::pn_message_body(@impl)) end
@private
# File lib/core/message.rb, line 74 def pre_encode # encode elements from the message Codec::Data.from_object(Cproton::pn_message_properties(@impl), !@properties.empty? && @properties) Codec::Data.from_object(Cproton::pn_message_instructions(@impl), !@instructions.empty? && @instructions) Codec::Data.from_object(Cproton::pn_message_annotations(@impl), !@annotations.empty? && @annotations) Codec::Data.from_object(Cproton::pn_message_body(@impl), @body) end
Returns the priority.
# File lib/core/message.rb, line 186 def priority Cproton.pn_message_get_priority(@impl) end
Sets the priority.
NOTE:
Priority values are limited to the range [0,255].
Options¶ ↑
-
priority - the priority value
# File lib/core/message.rb, line 178 def priority=(priority) raise TypeError.new("invalid priority: #{priority}") if not priority.is_a?(Numeric) raise RangeError.new("priority out of range: #{priority}") if ((priority > 255) || (priority < 0)) Cproton.pn_message_set_priority(@impl, priority.floor) end
Returns the reply-to address
# File lib/core/message.rb, line 323 def reply_to Cproton.pn_message_get_reply_to(@impl) end
Returns the reply-to group id.
# File lib/core/message.rb, line 479 def reply_to_group_id Cproton.pn_message_get_reply_to_group_id(@impl) end
Returns the subject
# File lib/core/message.rb, line 307 def subject Cproton.pn_message_get_subject(@impl) end
@return [String] get the destination address.
# File lib/core/message.rb, line 289 def to Cproton.pn_message_get_address(@impl) end
@param address set the destination address
# File lib/core/message.rb, line 283 def to=(address) Cproton.pn_message_set_address(@impl, address) end
Returns the time-to-live, in milliseconds.
# File lib/core/message.rb, line 204 def ttl Cproton.pn_message_get_ttl(@impl) end
Sets the time-to-live for the message.
Options¶ ↑
-
time - the time in milliseconds
# File lib/core/message.rb, line 196 def ttl=(time) raise TypeError.new("invalid ttl: #{time}") if not time.is_a?(Numeric) raise RangeError.new("ttl out of range: #{time}") if ((time.to_i < 0)) Cproton.pn_message_set_ttl(@impl, time.floor) end
Returns the user id.
# File lib/core/message.rb, line 278 def user_id Cproton.pn_message_get_user_id(@impl) end