On Tue, 2003-12-09 at 01:30, Bruce Slawson wrote: > <fontfamily><param>Courier</param>Ivelin, > > > Thanks, that explains a lot. > > > All I want to do right now is load balance my MDBs which looks like it > should work fine. I will be using a shared database to persist the > queues. What do I need to configure to use the JMS clustering and > load balanced MDBs? Its not very clear. >
Seem's clear to me, load balancing is not supported. All requests go to the singleton jms machine. If that machine dies, another machine recovers from the db and takes over as the jms server. Completely separate from HA, it is possible to configure jboss's mdb to listen to multiple servers. You do this configuring multiple jms providers and then attaching an invoker proxy binding for each provider to the mdb. That way clients can send to any machine and the mdb will retrieve it. But this does not provide failover. e.g. If the client sends a message to a server that dies before the mdb retrieves it, you will have to wait until the server recovers before the mdb processes it. > > Also, another thing I am not sure about is the "state manager" that > you mention in this doc. You say this needs to be a "JDBC state > manger" for fail-over to work. Is this something different than using > a database for the JMS persistence? How do I configure it? > The JDBC StateManager replaces the file StateManager (which takes and stores its state in conf/jbossmq-state.xml) configured in jbossmq-service.xml The file statemanager does not work with failover, because any dynamic durable subscriptions created on one machine are unknown to other machines. Here is an example deployment that will be included in docs/examples/jms from 3.2.4 I've included it as an attachment as well since e-mail is likely to screw up the formating. It details the other configuration instructions. <?xml version="1.0" encoding="UTF-8"?> <!-- $Id: hsqldb-jdbc-state-service.xml,v 1.1.2.1 2003/12/09 15:26:18 ejort Exp $ --> <server> <!-- ==================================================================== --> <!-- JBossMQ State Management using HSQLDB --> <!-- See docs/examples/jms for other configurations --> <!-- --> <!-- IMPORTANT OTHER CONFIGURATION INSTRUCTIONS --> <!-- --> <!-- 1) Remove the File StateManager from deploy/jms/jbossmq-service.xml --> <!-- 2) Replace the jbossmq configuration with the following --> <!-- database login module in conf/login-config.xml --> <!-- <application-policy name = "jbossmq"> <authentication> <login-module code = "org.jboss.security.auth.spi.DatabaseServerLoginModule" flag = "required"> <module-option name = "unauthenticatedIdentity">guest</module-option> <module-option name = "dsJNDI">java:/DefaultDS</module-option> <module-option name = "principalsQuery">SELECT PASSWD FROM JMS_USERS WHERE USERID=?</module-option> <module-option name = "rolesQuery">SELECT ROLEID, 'Roles' FROM JMS_ROLES WHERE USERID=?</module-option> </login-module> </authentication> </application-policy> --> <!-- To configure users use sql, e.g. --> <!-- insert into JMS_USERS (USERID, PASSWD) VALUES('guest', 'guest') --> <!-- insert into JMS_ROLES (USERID, ROLEID) VALUES('guest', 'guest') --> <!-- To configure durable subscritpions use sql, e.g. --> <!-- insert into JMS_SUBSCRIPTIONS (CLIENTID, SUBNAME, TOPIC) --> <!-- VALUES('clientid', 'subscription', 'testDurableTopic') --> <!-- ==================================================================== --> <!-- A Statemanager that stores state in the database --> <mbean code="org.jboss.mq.sm.jdbc.JDBCStateManager" name="jboss.mq:service=StateManager"> <depends optional-attribute-name="ConnectionManager">jboss.jca:service=LocalTxCM,name=DefaultDS</depends> <attribute name="SqlProperties"> CREATE_USER_TABLE = CREATE TABLE JMS_USERS (USERID VARCHAR(32) NOT NULL, PASSWD VARCHAR(32) NOT NULL, \ CLIENTID VARCHAR(128), PRIMARY KEY(USERID)) CREATE_ROLE_TABLE = CREATE TABLE JMS_ROLES (ROLEID VARCHAR(32) NOT NULL, USERID VARCHAR(32) NOT NULL, \ PRIMARY KEY(USERID, ROLEID)) CREATE_SUBSCRIPTION_TABLE = CREATE TABLE JMS_SUBSCRIPTIONS (CLIENTID VARCHAR(128) NOT NULL, \ SUBNAME VARCHAR(128) NOT NULL, TOPIC VARCHAR(255) NOT NULL, \ SELECTOR VARCHAR(255), PRIMARY KEY(CLIENTID, SUBNAME)) GET_SUBSCRIPTION = SELECT TOPIC, SELECTOR FROM JMS_SUBSCRIPTIONS WHERE CLIENTID=? AND SUBNAME=? LOCK_SUBSCRIPTION = SELECT TOPIC, SELECTOR FROM JMS_SUBSCRIPTIONS WHERE CLIENTID=? AND SUBNAME=? GET_SUBSCRIPTIONS_FOR_TOPIC = SELECT CLIENTID, SUBNAME, SELECTOR FROM JMS_SUBSCRIPTIONS WHERE TOPIC=? INSERT_SUBSCRIPTION = INSERT INTO JMS_SUBSCRIPTIONS (CLIENTID, SUBNAME, TOPIC, SELECTOR) VALUES(?,?,?,?) UPDATE_SUBSCRIPTION = UPDATE JMS_SUBSCRIPTIONS SET TOPIC=?, SELECTOR=? WHERE CLIENTID=? AND SUBNAME=? REMOVE_SUBSCRIPTION = DELETE FROM JMS_SUBSCRIPTIONS WHERE CLIENTID=? AND SUBNAME=? GET_USER_BY_CLIENTID = SELECT USERID, PASSWD, CLIENTID FROM JMS_USERS WHERE CLIENTID=? GET_USER = SELECT PASSWD, CLIENTID FROM JMS_USERS WHERE USERID=? CREATE_TABLES_ON_STARTUP = TRUE </attribute> </mbean> </server> Regards, Adrian > > Thanks, > > Bruce > > </fontfamily><fontfamily><param>Times</param><bigger><bigger> > > </bigger></bigger></fontfamily> > > > On Dec 6, 2003, at 9:11 AM, Ivelin Ivanov wrote: > > > <excerpt> > > See this document for a detailed description: > > http://www.cocoonhive.org/articles/jboss/20031125/JBoss32-hajms.html > > > The code is simple and solid. > > If you describe your use case I may be able to advise > > whether it will work for you. > > > Regards, > > > Ivelin > > > > --- Sacha Labourey <<[EMAIL PROTECTED]> > > wrote: > > <excerpt>I don't think it is fulll JMS Clustering, but a > > clustered invocation layer. > > > <excerpt>-----Original Message----- > > From: [EMAIL PROTECTED] > > [mailto:[EMAIL PROTECTED] On > > </excerpt>Behalf Of > > <excerpt>Bill Burke > > Sent: samedi, 6. dÃcembre 2003 04:23 > > To: [EMAIL PROTECTED]; > > </excerpt>[EMAIL PROTECTED] > > <excerpt>Subject: Re: [JBoss-user] JMS Clustering > > > Ivelin will have to answer this. > > > Bill > > > Bruce Slawson wrote: > > > <excerpt>I looks like 3.2.3 now includes JMS clustering. > > </excerpt></excerpt>I have a couple of > > <excerpt><excerpt>questions... > > > Is it robust and ready for a production > > </excerpt></excerpt>environment? > > <excerpt><excerpt>Does is provide fail over, load balancing, or > > </excerpt></excerpt>both? > > <excerpt><excerpt>Are MDBs now clustered as well? > > Are there any docs on how to configure and use > > </excerpt></excerpt>JMS clustering? > > <excerpt><excerpt> > > Thanks, > > Bruce > > > > > > > </excerpt></excerpt> > > </excerpt>------------------------------------------------------- > > <excerpt><excerpt><excerpt>This SF.net email is sponsored by: IBM Linux > > </excerpt></excerpt>Tutorials. > > <excerpt><excerpt>Become an expert in LINUX or just sharpen your > > </excerpt></excerpt>skills. > > <excerpt>Sign up for IBM's > > <excerpt>Free Linux Tutorials. Learn everything from the > > </excerpt></excerpt>bash shell > > <excerpt>to sys admin. > > <excerpt>Click now! > > </excerpt></excerpt> > > </excerpt>http://ads.osdn.com/?ad_id=1278&alloc_id=3371&op=click > > <excerpt><excerpt><excerpt>_______________________________________________ > > JBoss-user mailing list > > [EMAIL PROTECTED] > > > </excerpt></excerpt> > > </excerpt>https://lists.sourceforge.net/lists/listinfo/jboss-user > > <excerpt><excerpt><excerpt> > > > </excerpt> -- xxxxxxxxxxxxxxxxxxxxxxxx Adrian Brock Director of Support Back Office JBoss Group, LLC xxxxxxxxxxxxxxxxxxxxxxxx
<?xml version="1.0" encoding="UTF-8"?> <!-- $Id: hsqldb-jdbc3-service.xml,v 1.1.2.2 2003/12/05 05:29:18 ejort Exp $ --> <server> <!-- ==================================================================== --> <!-- Persistence and caching using HSQLDB --> <!-- See docs/examples/jms for other configurations --> <!-- ==================================================================== --> <!-- | The destination manager is the core service within JBossMQ --> <mbean code="org.jboss.mq.server.jmx.DestinationManager" name="jboss.mq:service=DestinationManager"> <depends optional-attribute-name="MessageCache">jboss.mq:service=MessageCache</depends> <depends optional-attribute-name="PersistenceManager">jboss.mq:service=PersistenceManager</depends> <depends optional-attribute-name="StateManager">jboss.mq:service=StateManager</depends> </mbean> <!-- | The MessageCache decides where to put JBossMQ message that | are sitting around waiting to be consumed by a client. | | The memory marks are in Megabytes. Once the JVM memory usage hits | the high memory mark, the old messages in the cache will start getting | stored in the DataDirectory. As memory usage gets closer to the | Max memory mark, the amount of message kept in the memory cache aproaches 0. --> <mbean code="org.jboss.mq.server.MessageCache" name="jboss.mq:service=MessageCache"> <attribute name="HighMemoryMark">50</attribute> <attribute name="MaxMemoryMark">60</attribute> <attribute name="CacheStore">jboss.mq:service=PersistenceManager</attribute> </mbean> <!-- | The jdbc2 PersistenceManager is the new improved JDBC implementation. | This implementation allows you to control how messages are stored in | the database. | | Use this PM if you want the reliablity a relational database can offer | you. The default configuration is known to work with hsqldb, other | databases will requrie teaking of the SqlProperties e.g. changing table | colum definitions to database supported types. | | Take care that the selected blob column type can store | all message data. Some databases (e.g. mySQL) offer blob types with | different maximum capacity (e.g. mySQL-type BLOB=64K, LONGBLOB=2G). | | If you encouter problems with the configured BLOB_TYPE try a different | setting. Valid settings are OBJECT_BLOB, BINARYSTREAM_BLOB and BYTES_BLOB. --> <mbean code="org.jboss.mq.pm.jdbc3.PersistenceManager" name="jboss.mq:service=PersistenceManager"> <depends optional-attribute-name="ConnectionManager">jboss.jca:service=LocalTxCM,name=DefaultDS</depends> <attribute name="SqlProperties"> BLOB_TYPE=OBJECT_BLOB UPDATE_MARKED_MESSAGES = UPDATE JMS_MESSAGE_LOG SET TXID=?, TXOP=? WHERE TXOP=? UPDATE_MARKED_REFERENCES = UPDATE JMS_REFERENCE_LOG SET TXID=?, TXOP=? WHERE TXOP=? UPDATE_MARKED_MESSAGES_WITH_TX = UPDATE JMS_MESSAGE_LOG SET TXID=?, TXOP=? WHERE TXOP=? AND TXID=? UPDATE_MARKED_REFERENCES_WITH_TX = UPDATE JMS_REFERENCE_LOG SET TXID=?, TXOP=? WHERE TXOP=? AND TXID=? DELETE_MARKED_MESSAGES_WITH_TX = DELETE FROM JMS_MESSAGE_LOG WHERE TXID IN (SELECT TXID FROM JMS_TRANSACTION_LOG) AND TXOP=? DELETE_MARKED_REFERENCES_WITH_TX = DELETE FROM JMS_REFERENCE_LOG WHERE TXID IN (SELECT TXID FROM JMS_TRANSACTION_LOG) AND TXOP=? DELETE_TX = DELETE FROM JMS_TRANSACTION_LOG WHERE TXID = ? DELETE_MARKED_MESSAGES = DELETE FROM JMS_MESSAGE_LOG WHERE TXID=? AND TXOP=? DELETE_MARKED_REFERENCES = DELETE FROM JMS_REFERENCE_LOG WHERE TXID=? AND TXOP=? INSERT_TX = INSERT INTO JMS_TRANSACTION_LOG (TXID) values(?) SELECT_MAX_TX = SELECT MAX(TXID) FROM JMS_TRANSACTION_LOG SELECT_MESSAGES_IN_DEST = SELECT MESSAGEID, MESSAGEBLOB FROM JMS_MESSAGE_LOG WHERE DESTINATION=? SELECT_REFERENCES_IN_DEST = SELECT R.MESSAGEID, M.MESSAGEBLOB, R.REDELIVERED, R.REDELIVERS FROM JMS_REFERENCE_LOG AS R, JMS_MESSAGE_LOG AS M \ WHERE R.MESSAGEID = M.MESSAGEID AND R.DESTINATION=? SELECT_MESSAGE = SELECT MESSAGEID, MESSAGEBLOB FROM JMS_MESSAGE_LOG WHERE MESSAGEID=? AND DESTINATION=? INSERT_MESSAGE = INSERT INTO JMS_MESSAGE_LOG (MESSAGEID, DESTINATION, MESSAGEBLOB, TXID, TXOP, LATECLONE) VALUES(?,?,?,?,?,?) INSERT_REFERENCE = INSERT INTO JMS_REFERENCE_LOG (MESSAGEID, DESTINATION, TXID, TXOP, REDELIVERED, REDELIVERS) VALUES(?,?,?,?,?,?) MARK_MESSAGE = UPDATE JMS_MESSAGE_LOG SET TXID=?, TXOP=? WHERE MESSAGEID=? AND DESTINATION=? MARK_REFERENCE = UPDATE JMS_REFERENCE_LOG SET TXID=?, TXOP=? WHERE MESSAGEID=? AND DESTINATION=? DELETE_MESSAGE = DELETE FROM JMS_MESSAGE_LOG WHERE MESSAGEID=? AND DESTINATION=? DELETE_REFERENCE = DELETE FROM JMS_REFERENCE_LOG WHERE MESSAGEID=? AND DESTINATION=? UPDATE_MESSAGE = UPDATE JMS_MESSAGE_LOG SET MESSAGEBLOB=? WHERE MESSAGEID=? AND DESTINATION=? UPDATE_REFERENCE = UPDATE JMS_REFERENCE_LOG SET REDELIVERED=?, REDELIVERS=? WHERE MESSAGEID=? AND DESTINATION=? DELETE_ORPHANED_MESSAGES = DELETE FROM JMS_MESSAGE_LOG WHERE LATECLONE = '1' AND MESSAGEID NOT IN (SELECT MESSAGEID FROM JMS_REFERENCE_LOG) DELETE_ALL_TXS = DELETE FROM JMS_TRANSACTION_LOG CREATE_REFERENCE_TABLE = CREATE CACHED TABLE JMS_REFERENCE_LOG ( MESSAGEID INTEGER NOT NULL, \ DESTINATION VARCHAR(256) NOT NULL, TXID INTEGER, TXOP CHAR(1), \ REDELIVERED CHAR(1), REDELIVERS INTEGER, \ PRIMARY KEY (MESSAGEID, DESTINATION) ) CREATE_MESSAGE_TABLE = CREATE CACHED TABLE JMS_MESSAGE_LOG ( MESSAGEID INTEGER NOT NULL, \ DESTINATION VARCHAR(255) NOT NULL, TXID INTEGER, TXOP CHAR(1), LATECLONE CHAR(1), \ MESSAGEBLOB OBJECT, PRIMARY KEY (MESSAGEID, DESTINATION) ) CREATE_TX_TABLE = CREATE CACHED TABLE JMS_TRANSACTION_LOG ( TXID INTEGER ) CREATE_TABLES_ON_STARTUP = TRUE </attribute> </mbean> </server>