Hello all.

I'm developing a C++ enterprise application, actually a revamp of an already running solution. Briefly speaking, it's an architecture where every component is exposing input and output channels, and the whole application is deployed as a combination of such components, where a configuration file defines the components to instantiate, and how to connect their channels. Some components are basically data sources, other are able to process messages, and some other are just sinks, that are commonly able to send a response to a foreign system.

Some of the requirements for the new version are high availability, load sharing (clustering in fact) and bulletproof persistence for the messages streamed into the channels. So, I think that the best way to achieve this, will be to have a central component to manage all the channels (we could call them queues, actually), as all the new features could be centralized into this component: persistence for the messages, load sharing (as different machines could be running against a broker) and high availability (if the brokers could work in a master-slave mode).

As during the last years, I've also involved in some java developments, I had the oportunity to know the Apache ActiveMQ product. So, my idea is to have something in the C++ domain, that was able to perform the same basic tasks than the ActiveMQ message broker.

Excuse for this long introduction, but I think that having a clear idea of what are my needs and vision, would be better to know if qpid (the C++ broker, particularly) is a suitable product to meet them. So, the questions:

- The first question is about deploy posibilities. Since I would like the broker to be a component of my server, is there any problem into having it embedded into some kind of service container, to meet my architecture? Or does it need to be deployed always as an standalone process? My idea is to wrap it into one of my service containers, exposing start/stop semantics, to be able to have the broker deployed as part of my main server.

- My idea of HA / Load Sharing is borrowed from what I've learn in the ActiveMQ world (their JDBC master/slave). I would like to have a master broker (active), in some of the deployed servers, with all the clients (producers and consumers) in all the servers (or external clients), using this broker. If some problem arises with this server, some of the slave ones will adquire the master role (this could be made relying in some RDBMS locking scheme). The clients will use a failover schema to cycle between the different existing brokers, until they find a working one. This way, we will have HA /Load Sharing. Is this scenario, or something equivalent, possible with qpid? Of course, we will need a message store that could be seen by all the clustered brokers, presumably located in a HA RDBMS solution.

- About the RDBMS storage, my idea will be to create a message store relying in a ODBC driver. Do you think it's feasible? Or is there any need for the store that a RDBMS could not meet?

- Another interesting feature will be to be able to have some kind of direct communication for clients running inside the same process of the active broker. This is also inspired in the activemq vm tranport, avoiding a socket communication for in-process clients. This way, every in-process client would use a failover connector, where one of the uris will be the in-process one, and the other some regular socket ones to the other brokers in the cluster.

- The environment to develop / run the solution will be the Solaris Operating System, using the Sun Studio 12 compilers suite. Is there any problem with that?


Other than using qpid, I'm considering to develop myself a solution. But I think that it will be better to contribute to qpid for the missing parts, if you think that they could be implemented and if this meets the goals of the project. This is why I sent this mail to the developers list, because I would like to know the implications of my needs in terms of development efforts. Things like "yes, you just need to implement the interface AAAA", or "yes, it can be done, but the class BBBB should be extended to support this or that".

Thanks a lot for reading so far.

Best regards.

--
Manuel


Reply via email to