In the code you shared I don't see any evidence that you're properly configuring your brokers to cluster. A pair of brokers using replication need a valid cluster to discover each other. This is noted in the documentation [1] which states, "A proper cluster configuration is required as a pre-requisite for an HA configuration."
Instead of attempting to configure the broker via the configuration API would it be possible for you to put a broker.xml file on your classpath? That would save you a lot of time and effort, and it would be much more flexible if you ever needed to change the configuration. In any case, take a look at one of the replicated examples [2] as a template for what you need to configure. Justin [1] https://activemq.apache.org/components/artemis/documentation/latest/ha.html#ha-policies [2] https://github.com/apache/activemq-artemis-examples/tree/main/examples/features/ha On Tue, Apr 8, 2025 at 9:07 PM Niraj Kumar Rohit <nirajkumarro...@gmail.com> wrote: > Hi > > > USE CASE:-- > 1.We have one app which run in two server DP1 AND DP2 > 2.Both DP1 and DP2 using embedded EmbeddedActiveMQ.java API to run apache > activemq artemis. > 3.if i start DP1 1st then it is become live server and DP2 become > backup and vice versa > 4.Now i shutdown DP1 then DP2 should live and as i start DP1 it beahve > as backup till DP2 not fail. > 5.in this case of artemis after fail of DP1, DP2 is not behaving as live > server. because after failover of DP1 , DP2 is not get activate .i am > checking like this and always traped into loop nver come out from the > loop. > > while > (!jmsServer.getActiveMQServer().waitForActivation(30L,TimeUnit.SECONDS)) { > Thread.sleep(100); > > } > 6.API using for live and backup server > > if (isCurrentServerLive){ > ReplicatedPolicyConfiguration haPolicy = new > ReplicatedPolicyConfiguration(); > haPolicy.setGroupName("bsm-back-up-group"); > haPolicy.setInitialReplicationSyncTimeout(120000); > haPolicy.setCheckForLiveServer(true); // Critical for failover > detection > haPolicy.setQuorumSize(1); // Minimum nodes required > configuration.setHAPolicyConfiguration(haPolicy); > }else{ > ReplicaPolicyConfiguration haPolicy = new > ReplicaPolicyConfiguration(); > haPolicy.setGroupName("bsm-back-up-group"); > haPolicy.setInitialReplicationSyncTimeout(120000); > haPolicy.setRestartBackup(false); // Don't restart when live > exists > haPolicy.setAllowFailBack(true); // Allow primary to resume > configuration.setHAPolicyConfiguration(haPolicy);; > > } > > > 7.even listern is also not getting call , listner implemation in backup > side > public void registerListener(boolean isCurrentServerLive) { > LOG.info("kutt registerListener "+(!isCurrentServerLive?"back going > to register Listner":"live server not going to register")); > if (!isCurrentServerLive) { > final ActiveMQServer artemisServer = > jmsServer.getActiveMQServer(); > LOG.info(" registerListener done"); > artemisServer.registerActivateCallback(new ActivateCallback() > > { > @Override > public void preActivate() { > > LOG.info(" registerListener preActivate() called"); > } > > @Override > public void deActivate() { > LOG.info(" registerListener deActivate() called"); > } > > @Override > public void activationComplete() { > LOG.info(" registerListener activationComplete() > called"); > } > > > @Override > public void activated() { > LOG.info(" registerListener activated() called"); > > > // Below changes to check if the live bus is really > active. > // read the server state initially see the last > interval > // loop of 2 times of interval > // wait of interval for 1 second > // read the state and see if the state changes > // if there is change then without changing the live > bus then restart > // if there is no change then update the live server > and then restart > try { > long busState = busData.getServerState(); > int maxChecks = 10; > boolean isLiveBusActive = false; > > synchronized (this) { > while (!isLiveBusActive && (maxChecks > 0)) { > wait(1000L); > > isLiveBusActive = (busState != > busData.getServerState()); > LOG.info(" listerner called now on failover > with state of backup"+isLiveBusActive); > maxChecks--; > } > } > > if (!isLiveBusActive) > busData.setLiveServer(socket); > } catch (Exception e) { > LOG.info("Failed to update live server after backup > server got activated", e); > } > > LOG.info("restarting backup server before clients fail > over"); > try{ > HornetQRunner.main(new String[]{"strat"}); > }catch(Exception e){ > LOG.info("faled to satrt"); > } > > // Throwing IllegalStateException to make sure the > calling old jmsserver doesn't finish it's failover > // since it had been stopped and a new one has been > started, > throw new IllegalStateException("Need to restart > instead of activation"); > } > }); > } > > } > > > > > i need your suggestion to make it work . and thanks in advance for your > help. > > its very urgent our dead line is very near > > Thanks > Niraj >