Commit Graph

465 Commits

Author SHA1 Message Date
Gunnar Hillert
6160ed05f3 Merge pull request #44 from garyrussell/AMQP-238
* garyrussell-AMQP-238:
  AMQP-238 SF Version 3.0.5 -> 3.0.7
2012-05-30 11:25:25 -04:00
Gary Russell
9a4dffe2ac AMQP-238 SF Version 3.0.5 -> 3.0.7 2012-05-30 11:06:42 -04:00
Gunnar Hillert
37e04506f7 Merge pull request #41 from garyrussell/AMQP-198
* garyrussell-AMQP-198:
  AMQP-198 Document Mixed Queue Arg Types
2012-05-29 23:16:53 -04:00
Gary Russell
38049201e0 AMQP-198 Document Mixed Queue Arg Types
Need to declare the type when setting non-string arguments,
such as x-message-ttl.

Add test showing how to configure a map of mixed types.
2012-05-29 23:14:24 -04:00
Gunnar Hillert
176733d074 Merge pull request #40 from garyrussell/AMQP-237
* garyrussell-AMQP-237:
  AMQP-237 Remove JavaDoc Warnings
2012-05-29 23:08:18 -04:00
Gary Russell
60900baf3d AMQP-237 Remove JavaDoc Warnings
Fix white space
2012-05-29 23:06:53 -04:00
Oleg Zhurakousky
d60f069439 Merge pull request #39 from garyrussell/AMQP-236
* AMQP-236:
  AMQP-236 Remove DOS Newlines
2012-05-24 10:48:09 -04:00
Gary Russell
662ea5caeb AMQP-236 Remove DOS Newlines
Some files had DOS Newlines (CRLF) instead of Unix (LF).

Use 'git log -p -b' to verify only white space changes.
2012-05-24 10:47:19 -04:00
Oleg Zhurakousky
50f428824e Merge pull request #38 from garyrussell/AMQP-232
* AMQP-232b:
  AMQP-232 Failing Tests (Timeout)
2012-05-24 10:46:19 -04:00
Gary Russell
23f66ed55d AMQP-232 Failing Tests (Timeout)
Increase timeout to avoid intermittent test failures.
2012-05-22 07:35:48 -04:00
Oleg Zhurakousky
3938b335c4 Merge pull request #36 from garyrussell/AMQP-234
* AMQP-234:
  AMQP-234 Create 1.1 Schema
2012-05-18 14:43:31 -04:00
Gary Russell
9e63e41137 AMQP-234 Create 1.1 Schema
Revert 1.0 schema to 1.0 and create 1.1 schema.

Update all test files to use version-less (1.1) schema.

Update spring-schemas.
2012-05-18 14:42:11 -04:00
Oleg Zhurakousky
5c08578e80 Merge pull request #37 from garyrussell/AMQP-232
* AMQP-232a:
  AMQP-232 Fix Failing Integration Tests
2012-05-18 14:35:09 -04:00
Gary Russell
f60eb5e217 AMQP-232 Fix Failing Integration Tests
Increase timers to avoid sporadic failures in
the nightly integration test build.
2012-05-18 09:23:32 -04:00
Oleg Zhurakousky
8f00710120 Merge pull request #35 from garyrussell/AMQP-233
* AMQP-233:
  AMQP-233 Allow Returns without Confirms
2012-05-16 11:31:44 -04:00
Gary Russell
8545842ab8 AMQP-233 Allow Returns without Confirms
Previously, Publisher Confirms were required in order
to enable returned (immediate/mandatory) messages.

AMQP-233 Polishing (PR Review)
2012-05-16 11:30:50 -04:00
Oleg Zhurakousky
cd3966710d Merge pull request #34 from garyrussell/AMQP-232
* AMQP-232:
  AMQP-232 Wait for Shutdown
2012-05-15 20:56:18 -04:00
Gary Russell
092b89189b AMQP-232 Wait for Shutdown 2012-05-15 20:41:26 -04:00
Oleg Zhurakousky
ac71c3c4cb Merge pull request #33 from garyrussell/AMQP-231
* AMQP-231:
  AMQP-231 Failing Integration Tests
2012-05-14 12:35:11 -04:00
Gary Russell
2dcf0ea642 AMQP-231 Failing Integration Tests
Mock setup for connection creation in 4 tests was not
updated for AMQP-225 changes (external executor).

Listener connection retry did not check for a
closed channel.

AMQP-231 More Spurious Integration Test Failures

RabbitBindingIntegrationTests Issues

* Asserting notNull on consumer tag before it might have been returned
by the broker.

* Calling basicCancel() on the wrong channel - the rabbit 2.5.0
client sent the cancel to the broker anyhow; the newer clients
check whether the tag is for a known consumer and throw an
exception if not. The Test cases were calling basicCancel() on
the sending channel instead of the consuming channel.

MessageListenerContainerLifecycleIntegrationTests did not
wait long enough for the listener's consumer to terminate.
2012-05-14 12:34:28 -04:00
Dave Syer
99fbfa16cc [maven-release-plugin] prepare for next development iteration 2012-05-11 18:08:20 +01:00
Dave Syer
04ff5d29d2 [maven-release-plugin] prepare release 1.1.0.RELEASE 2012-05-11 18:03:23 +01:00
Oleg Zhurakousky
c42b4398d1 Merge pull request #32 from garyrussell/AMQP-226
* AMQP-226:
  AMQP-226 Bump Spring Retry Version to 1.0.1
2012-05-11 12:16:21 -04:00
Gary Russell
d6890a472b AMQP-226 Bump Spring Retry Version to 1.0.1
Fix for exponential back-off policy.
2012-05-11 12:10:29 -04:00
Oleg Zhurakousky
6d13e4e9fa Merge pull request #31 from ghillert/AMQP-193
* AMQP-193:
  AMQP-193 - Add RabbitTransactionManager to RefDoc For reference see: https://jira.springsource.org/browse/AMQP-193
2012-05-11 08:15:11 -04:00
Gunnar Hillert
ce43eb4e2b AMQP-193 - Add RabbitTransactionManager to RefDoc
For reference see: https://jira.springsource.org/browse/AMQP-193
2012-05-10 23:43:20 -04:00
Gary Russell
bb3f2dc364 Merge pull request #30 from olegz/AMQP-207 2012-05-10 16:38:41 -04:00
Oleg Zhurakousky
a1b47aa3a5 AMQP-207 XSD Documentation
Remove explicit mention of default exchange if key is not provided.
However, considering that no-key is still a valid option, and would result in binding to the default exchange
we may want to consider making 'key' a required field on the directExchange binding while also stating that
if you want the default binding than you should not have a <binding> defined in the first place.
2012-05-10 16:37:39 -04:00
Oleg Zhurakousky
862c59a49f Merge pull request #14 from SamNelson/AMQP-202
Created separate branch to do the merge since the work was done on the master
* AMQP-202:
  passing basic tests
2012-05-10 14:11:01 -04:00
Sam Nelson
ec5c3f3646 passing basic tests
it might help if I added the files to git

fixed for maps

removed bad import

removed ClassMapper

formatted code after importing eclipse-code-formatter.xml

formatted test code

added author tag

Reinstated the ClassMapper interface, Renamed DefaultJavaTypeMapper to DefaultClassMapper, DefaultClassMapper now implements ClassMapper and JavaTypeMapper interfaces, Moade TypeFactory imports static.

Reverted DefaultClassMapper. Moved DefaultJavaTypeMapper back.

added missing type mapper classes

Implemented backward compatibility with ClassMapper
2012-05-10 14:07:45 -04:00
Oleg Zhurakousky
91b6dc8eec Merge pull request #28 from ghillert/AMQP-228
* AMQP-228:
  AMQP-228 - Doc - Fix Incorrect Code Samples
2012-05-10 13:56:49 -04:00
Gunnar Hillert
f7ba68e579 AMQP-228 - Doc - Fix Incorrect Code Samples 2012-05-10 13:55:57 -04:00
Oleg Zhurakousky
7a26acb7c6 Merge pull request #29 from garyrussell/AMQP-201
* AMQP-201:
  AMQP-201 Exchange-to-Exchange Binding
2012-05-10 13:52:59 -04:00
Gary Russell
f78013671f AMQP-201 Exchange-to-Exchange Binding
The BindingFactoryBean already supported exchange to exchange
binding. Add namespace support; remove 'required' from queue
attribute in XSD; add 'exchange' (optional) and enforce XOR
in parser.

Builds on parser refactoring for Federated Exchange.

Tested with a real broker with the amqp-sample.

    <rabbit:direct-exchange name="si.test.exchange">
        <rabbit:bindings>
            <rabbit:binding queue="si.test.queue" key="si.test.binding" />
        </rabbit:bindings>
    </rabbit:direct-exchange>

    <rabbit:direct-exchange name="si.test.exchange2">
        <rabbit:bindings>
            <rabbit:binding exchange="si.test.exchange" key="si.test.binding" />
        </rabbit:bindings>
    </rabbit:direct-exchange>
2012-05-10 13:51:44 -04:00
Oleg Zhurakousky
ded9faac99 Merge pull request #27 from garyrussell/AMQP-215
* AMQP-215:
  AMQP-215 Federated Exchange Support
2012-05-10 13:50:12 -04:00
Gary Russell
e63fb7896f AMQP-215 Federated Exchange Support
Initial commit - schema, parser, parser tests,
integration tests.

TODO: doc.

Note: Federated exchanges need some hard config
on the server. The test cases use this

[
    {rabbitmq_federation,
     [
       {upstream_sets, [{"upstream-set", [[{connection, "upstream-server"} ]]}
                       ]},
       {connections, [{"upstream-server", [{host, "somehost"}]}
                     ]}
     ]
    }
].

If not available, the tests will be ignored.

AMQP-215 Reference Documentation

Add information about federated exchanges.

AMQP-215 Polishing - remove test exchanges.
2012-05-10 13:48:56 -04:00
Oleg Zhurakousky
24accd560e Merge pull request #19 from garyrussell/AMQP-219
* AMQP-219:
  AMQP-219 RabbitTemplate Conversion With Message
2012-05-10 13:44:55 -04:00
Gary Russell
7f19f4abdb AMQP-219 RabbitTemplate Conversion With Message
Previously, convertAndSend(), convertSendAndReceive() methods
"converted" an Object that was already a Message to a Message
with a null body.

Now, if the object is already a Message, no conversion is
performed.
2012-05-10 13:44:07 -04:00
Oleg Zhurakousky
6b8dd72b98 Merge pull request #26 from garyrussell/AMQP-213
* AMQP-213c:
  AMQP-213 Publisher Confirms/Returns
  AMQP-206 Support Rabbit HA
2012-05-10 13:41:56 -04:00
Gary Russell
5944e34b6e AMQP-213 Publisher Confirms/Returns
Initial Commit

Add support for multiple acks in one call.

AMQP-213 Polishing

Move confirmation state to PublisherCallbackChannel. Allows
the RabbitTemplate to handle confirms from multiple
channels.

Remove unnecessary synchronization.

Add tests for multiple threads - verifying the
functionality when more than one thread concurrently
uses the template.

NOTES: The CF cache size must be large enough
to cover the number of required channels - otherwise
the channel is closed before the confirms are received.

This could be alleviated by not closing channels if
P.C. are turned on.

Each PublisherCallbackConnection has two maps, the
first map (seqToListener) identifies which listener
gets the confirmation. The second map (pendingConfirms)
is a map of maps where the key is the listener and
the value is a map of pending confirms for that
listener. This map is given back to the listener
when registering.

In this way, the Rabbit template does not need to
hold a reference to every connection he has used.
Instead, when a connection is closed, the listener
is informed via a call to removePendingConfirmsReference().

The listener  uses the pending confirms maps to
determine if any confirms have expired.

Add test for two templates sharing the same
factory, ensuring the appropriate template
gets the confirmation.

AMQP-213 Polishing

AMQP-213 Add Support for Basic.Return

The rabbit template will be registered to receive return
messages if it is provided with a ReturnCallback. Either
mandatory or immediate must also be set for returns.

mandator and immediate are ignored if no callback is provided.

AMQP-213 Polishing

The RabbitTemplate can only support one each of
ConfirmCallback and ReturnCallback because there
is no way to correlate back to the caller.

In situations where more than one client is needed,
each needs its own RabbitTemplate.

The connection factory, and hence the connection and
channels, can be shared across templates.

AMQP-213 Add Namespace Support for Returns

Attributes added to template for mandatory, immediate,
return-callback.

Also confirm-callback for confirms.

AMQP-213 Return Reply Code Etc

Pass the reply code, reply text, exchange, and
routing key back to the client on returns.

AMQP-213 Polishing

Fix non-default exchange on convertAndSend.

AMQP-213 Polishing PR Review
2012-05-10 11:59:28 -04:00
Oleg Zhurakousky
fdb2513c96 Merge pull request #24 from garyrussell/AMQP-206c
* AMQP-206c:
  AMQP-206 Support Rabbit HA
2012-05-10 10:49:43 -04:00
Gary Russell
fd696bfaf9 AMQP-206 Support Rabbit HA
- Configure a list of addresses in ConnectionFactory
- Allow arguments (e.g. HA) for temporary reply queue creation

AMQP-206 Add queue-arguments Attribute

<queue/> now supports either <queue-arguments /> element
or a queue-arguments attribute which is a reference to
a <queue-arguments /> bean.

<queue-arguments /> is promoted to a top-level bean,
allowing for re-use, such as...

    <rabbit:queue-arguments id="haArgs">
	<entry key="x-ha-policy" value="all" />
    </rabbit:queue-arguments>

    <rabbit:queue name="si.test.queue" queue-arguments="haArgs" />

AMQP-206 Fix Parser Tests

AMQP-206 ReConnect To Mirrored Queue

If a consumer is connected to a mirror (slave), and the
master dies, the queue is moved. The consumer is given a
cancel notification, indicating we need to reconnect.

However, the move might not be complete, so we retry the
queue declaration a number of times before failing.

AMQP-206 Polishing

Cleanup retry counter name; trap exception on cancel of
temporary reply queue.

AMQP-206 Add reply-queue to RabbitTemplate

Allow specification of an explicit queue for replies. Adds
a correlation header to sendAndReceive messages (spring_reply_correlation)
which is used to correlate replies on the reply queue.

The queue is supplied to the template via the reply-queue
attribute; the template must be added as a <listener/> to a
<listener-container/> for the same queue. For example...

    <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" reply-queue="si.test.replies" />

    <rabbit:listener-container id="replyContainer" connection-factory="connectionFactory" task-executor="reply-exec">
    	<rabbit:listener ref="amqpTemplate" queues="si.test.replies"/>
    </rabbit:listener-container>

    <rabbit:queue name="si.test.replies" queue-arguments="haArgs" />

AMQP-206 Stack Reply Correlation

Stacks (pushes/pops) correlation when using a fixed queue for
replies in sendAndReceive methods.

Now supports

templatsendAndReceive()->listener->templateSendAndReceive()->
   listener->templateSendAndReceive->...

and the replies get correlated in each template appropriately.

AMQP-206 Polishing

Add exclusive test for addresses attribute; add parser test.

AMQP-206 Polishing

Improve configuration of reply-queue listener on rabbit template.
Previously a disjoint listener was required. Now the listener
is a child element of the template itself.

	<rabbit:template id="withReplyQ" connection-factory="connectionFactory" reply-queue="reply.queue">
		<rabbit:reply-listener />
	</rabbit:template>

The reply-listener is a full-blown listener container, but uses the
template's connection factory and so that attribute, as well as the
message-converter is disallowed at run-time.

AMQP-206 Polishing

Remove disallowed attributes from <retry-listener/> child element
in schema.

AMQP-206 Reference Documentation

Update docs with addresses attribute on ConnectionFactory and
reply-queue on template.
2012-05-10 10:48:38 -04:00
Oleg Zhurakousky
a356eb24bb Merge pull request #25 from garyrussell/AMQP-225
* AMQP-225:
  AMQP-225 Add Support for External Executor
2012-05-10 10:41:20 -04:00
Gary Russell
5ea317798f AMQP-225 Add Support for External Executor
If no ExecutorService is provided when creating a new
connection, Rabbit uses a default fixed thread pool
executor with 5 threads.

You can now specify an executor on the
<rabbit:connection-factory/>.

Due to limitations in the Rabbit API,
this must either reference a ExecutorService (such as
one returned by Executors.new...Executor() methods, or
a Spring ThreadPoolTaskExecutor, such as one defined
using the <task:executor/> element.

The underlying API (newConnection()) with no arg
calls (newConnection(null)), so it is safe to
always use newConnection(exec), and not test for
null.
2012-05-10 10:40:09 -04:00
Gary Russell
49cc759b5f Merge pull request #18 from edscriven/master 2012-05-10 09:02:55 -04:00
Gary Russell
893f1439df AMQP-208 Polishing
Remove continue statements; fix whitespace issues.
2012-05-10 09:00:09 -04:00
Ed Scriven
75208ca8e5 AMQP-208 Default Exchange and Bindings
https://jira.springsource.org/browse/AMQP-208

Don't attempt to declare
the default exchange or bindings to it in RabbitAdmin.

Applied same logic to delete exchange and remove binding.

Refined existing auto delete queue tests to enable re-use of
native checking to see if queue exists and correct intent in names.
2012-05-10 08:59:30 -04:00
Oleg Zhurakousky
8332a77b7d Merge pull request #21 from garyrussell/AMQP-221
* AMQP-221:
  AMQP-221 Support Dead Letter Queues
2012-04-09 13:51:37 -04:00
Gary Russell
5526a91e39 AMQP-221 Support Dead Letter Queues
Support DLQ - the listener must throw an AmqpRejectAndDontRequeueException
and this will send a basic.reject with requeue false (instead of the
default true).

There is an issue with Rabbit DLQ handling with durable queues so,
currently, this only works when dead-lettering messages sent to
non-durable queues.

DLQ Polishing - Add Unit Tests

DLQ Polish Tests

AMQP-221 Add Option for Default Requeue Behavior

Previously, the default requeue behavior was true, with the
ability to override for a specific message by throwing an
AmqpRejectAndDontRequeueException.

However, as posted in a PR review, it is desirable to set
the default behavior using a property on the listener
container.

Now, by setting requeueRejected to false (default=true),
the default becomes false.

When true, the default can still be overriden for a specific
message as described above.
2012-04-09 13:50:27 -04:00
Oleg Zhurakousky
4a2e08ef4e Merge pull request #23 from garyrussell/AMQP-223
* AMQP-223:
  AMQP-223 Fix Consumer Thread Management
2012-04-09 13:46:21 -04:00