DBAL Support
Transactions, Asynchronous, Dead Letter Queue PHP DBAL
composer require ecotone/dbal
Powered by powerful database abstraction layer Doctrine/Dbal and Enqueue for asynchronous communication
To configure Connection follow instruction for given integration
class MessagingConfiguration
{
#[ServiceContext]
public function orderChannel()
{
return DbalBackedMessageChannelBuilder::create("orders");
}
}
Now
orders
channel will be available in our Messaging System. DbalBackedMessageChannelBuilder::create("orders")
->withAutoDeclare(false) // do not auto declare queue
->withDefaultTimeToLive(1000) // limit TTL of messages
By default
Ecotone
enables transactions for all Asynchronous Endpoints and Command Bus. You may use of Service Context
to turn off this configuration. You may also add more connections to be handled.class DbalConfiguration
{
#[ServiceContext]
public function registerTransactions() : array
{
return [
DbalConfiguration::createWithDefaults()
->withTransactionOnCommandBus(true) // Turn for running command bus
->withTransactionOnAsynchronousEndpoints(true) // for all asynchronous endpoints
->withoutTransactionOnAsynchronousEndpoints(["notifications"]) // turn off for list of asynchronous endpoint
->withDefaultConnectionReferenceNames([
"Enqueue\Dbal\DbalConnectionFactory",
"AnotherDbalConnectionFactory"
])
];
}
}
If we disable global transactions, it make sense to enable transactions on specific endpoint.
To do it all we need to do is to mark it with
Ecotone\Dbal\DbalTransaction\DbalTransaction
attribute.#[CommandHandler]
#[DbalTransaction]
public function sellProduct(SellProduct $command) : void
{
// do something with $command
}
DBAL provides support for Document Store, which is enabled by default.
Every document is stored inside the "
ecotone_document_store
" table. #[ServiceContext]
public function getDbalConfiguration(): DbalConfiguration
{
return DbalConfiguration::createWithDefaults()
->withDocumentStore(enableDocumentStoreAggregateRepository: true);
}
For testing purposes you may want to enable
In Memory implementation
. #[ServiceContext]
public function configuration()
{
return DbalConfiguration::createWithDefaults()
->withDocumentStore(inMemoryDocumentStore: true);
}
Table will be create for you, however this comes with extra SQL cost, to verify before adding new document, if table exists.
After releasing you may want to disable the check, as you know, that the table already exists.
#[ServiceContext]
public function getDbalConfiguration(): DbalConfiguration
{
return DbalConfiguration::createWithDefaults()
->withDocumentStore(initializeDatabaseTable: false);
}
Last modified 12d ago