DefaultJmsListenerContainerFactory vs DefaultMessa

2019-04-09 10:27发布

What are the advantages of using DefaultJmsListenerContainerFactory over DefaultMessageListenerContainer ?

  • If i configure DMLC directly , i do get a handle to check the status by calling isRunning(). Also i do get a facility to start and stop the DMLC

  • However, per new spring specs, if i configure DefaultJmsListenerContainerFactory , i do not get handle of DMLC, so i am unable to do any of above operations.

So looking at above limitation, can somebody explain why one should use DefaultJmsListenerContainerFactory over DMLC

Also, if i use DefaultJmsListenerContainerFactory , what are the ways to achive above functionality?

1条回答
干净又极端
2楼-- · 2019-04-09 10:44

The factory was introduced to support the creation of listener containers for @JmsListener annotated POJO methods.

If you are not using that mechanism, you can continue to define your DLMC directly.

EDIT

When using @JmsListener, the containers are not registered as beans themselves, but are available using the registry bean; you can get a reference to the container so you can start/stop etc.

See the javadocs for the JmsListenerEndpointRegistry for how to get references to the containers either individually by id, or all.

EDIT2

I am not sure what you mean in comment 3; the registry has all containers, regardless of which container factory was used to create the container...

@JmsListener(id="foo", destination="foo", containerFactory="one")
public void listen1(String payload) {
    System.out.println(payload + "foo");
}

@JmsListener(id="bar", destination="bar", containerFactory="two")
public void listen2(String payload) {
    System.out.println(payload + "bar");
}

If you are using configureListenerContainers() to programmatically create endpoints, you have to provide them with containers not container factories.

查看更多
登录 后发表回答