Closed zozlak closed 7 years ago
the jms.brokerUrl
doesn't exist in the fcrepo-reindexing application in the 4.6.x series. Can you point to where you see that it is being used? Can you also provide more information on your environment -- version of karaf, version of camel, version of fcrepo-camel-toolbox, applications installed.
My complete scenario is as follows.
I have Fedora coupled with a triplestore and I want to populate the triplestore after restoring Fedora content. As restore does not generate ActiveMQ messages, I need to trigger reindexing manually and that is where the reindexing plugin comes in.
My setup is:
http://fedora:8080/rest
and the ActiveMQ at tcp://fedora:61616
)ubuntu:latest
with openjdk-8-jdk-headless
package as a Java runtime environment)
mvn clean install -DskipTests
in fcrepo-service-activemq
, fcrepo-reindexing
and fcrepo-indexing-triplestore
subdirectoriesfeature:repo-add mvn:org.fcrepo.camel/toolbox-features/LATEST/xml/features
feature:install fcrepo-reindexing
feature:install fcrepo-service-activemq
feature:install fcrepo-indexing-triplestore
http://blazegraph:9999/blazegraph/sparql
)My Camel Toolbox Plugins configuration files are as follows:
jms.brokerUrl=tcp://fedora:61616
triplestore.baseUrl=http://blazegraph:9999/blazegraph/sparql
fcrepo.baseUrl=http://fedora:8080/rest
triplestore.namedGraph=http://my.domain
triplestore.reindex.stream=broker:queue:triplestore.reindex
error.maxRedeliveries=10
reindexing.stream=broker:queue:triplestore.reindex
rest.prefix=/reindexing
rest.port=9080
rest.host=localhost
The triplestore indexing plugin works well with these settings. When I create or modify a resource, the data in the triplestore are updated.
But when I trigger the reindexing with curl -i -X POST http://localhost:9080/reindexing -H 'content-type: application/json' -d '["activemq:queue:triplestore.reindex"]'
run inside the Karaf's Docker container, I get in the Karaf log:
2016-12-02 12:21:26,511 | INFO | tp1985176132-333 | ReindexingRouter | 159 - org.fcrepo.camel.fcrepo-reindexing - 4.7.0.SNAPSHOT | Initial indexing path:
2016-12-02 12:21:31,680 | WARN | ActiveMQ Task-1 | FailoverTransport | 53 - org.apache.activemq.activemq-osgi - 5.14.0 | Failed to connect to [tcp://localhost:61616] after: 10 attempt(s) continuing to retry.
So it looks like the reindexing was triggered but can not connect to the ActiveMQ on tcp://localhost:61616
.
If I understand correctly my setup, this is because the ActiveMQ does not run (from the Karaf's perspective) on tcp://localhost:61616
but on tcp://fedora:61616
and I have no mean to tell that to the reindexing plugin.
As you probably noticed I am compiling the plugins with the -DskipTests
switch. This is because the reindexing plugin failed to perform its tests. You can find the full build log here. Again it looks like the tests assume that there is a Fedora instance running locally which is not true in my setup.
Why are you compiling from source? I would highly recommend not compiling from source. There is no need to: those artifacts are all on Maven Central. Furthermore, I would suggest not using feature:repo-add mvn:org.fcrepo.camel/toolbox-features/LATEST/xml/features
; instead, identify the version you want to use: i.e. feature:repo-add mvn:org.fcrepo.camel/toolbox-features/4.6.2/xml/features
.
Even better, you would add that feature repository to $KARAF_HOME/etc/org.apache.karaf.features.cfg
like so:
featuresRepositories = \
..., \
mvn:org.apache.activemq/activemq-karaf/5.14.0/xml/features, \
mvn:org.apache.camel.karaf/apache-camel/2.17.3/xml/features, \
mvn:org.fcrepo.camel/fcrepo-camel/4.4.3/xml/features, \
mvn:org.fcrepo.camel/toolbox-features/4.6.2/xml/features
featuresBoot = \
..., \
fcrepo-service-camel, \
fcrepo-service-activemq, \
fcrepo-indexing-triplestore, \
fcrepo-reindexing
Then, you can, at any time simply remove the $KARAF_HOME/data
directory and "start fresh" by rebooting the container.
Just as a note -- I am running the camel-toolbox/4.6.2 in karaf/4.0.5 with a remote activemq broker (separate from Fedora), a remote fedora/4.7.0 connection and a remote triplestore. The only thing to note is that you need to set fcrepo.baseUrl=http://example.org/fcrepo/rest
. In your case, that would be http://fedora:8080/rest
.
And how does your reindexing plugin knows where the activemq broker is?
Or maybe by "remote activemq broker" you mean it is remote to Fedora but on the same host as Karaf?
The reindexing application finds the broker by looking it up in the OSGi service registry:
And by "remote", I mean it is on a separate machine, on a separate network that I do not control.
Why are you compiling from source?
I can sum it up as lack of knowledge on deploying Java applications.
By the way it will be nice to include somewhere a short guide on deploying the fcrepo-camel-toolbox for folks like me, who do not know (almost) anything on Java development stack (Maven, Karaf, OSGi containers, etc.).
For example in your last post you show me the right blueprint. It is nice but for me it only turns one question into the other. I guess it means that for the reindexing plugin I need to set up a separate activemq broker and somehow register in in the reindexing plugin Karaf. But can I use the broker already run by Fedora or should I need a separate one? And how I can register a broker in the reindexing plugin Karaf? (and btw why the triplestore indexing plugin reads the broker location from the configuration settings and not from the OSGI service registry?)
@zozlak the message broker is shared across all camel components, including the triplestore indexer. Most users will make use of the AMQ broker that comes bundled with Fedora, so unless you have particular failover/high-availability needs or are especially familiar with message brokers, I would not suggest setting up multiple brokers. All configuration related to message brokers is handled by the $KARAF_HOME/etc/org.fcrepo.camel.service.activemq.cfg
file. And as a further note, the Islandora project does not compile this from source -- they use a script to load the components into karaf: https://github.com/Islandora-CLAW/CLAW/blob/master/install/configs/karaf/fcrepo_camel_toolbox.script
As you can see in my previous post I have jms.brokerUrl=tcp://fedora:61616
set up in the $KARAF_HOME/etc/org.fcrepo.camel.service.activemq.cfg
. That is exactly how I supposed it to work (all plugins share activemq settings provided by the fcrepo-activemq plugin) and it does the job for the fcrepo-indexing-triplestore plugin. But when I trigger reindexing with curl -i -X POST http://localhost:9080/reindexing -H 'content-type: application/json' -d '["activemq:queue:triplestore.reindex"]' I am getting in Karaf logs:
2016-12-02 12:21:26,511 | INFO | tp1985176132-333 | ReindexingRouter | 159 - org.fcrepo.camel.fcrepo-reindexing - 4.7.0.SNAPSHOT | Initial indexing path:
2016-12-02 12:21:31,680 | WARN | ActiveMQ Task-1 | FailoverTransport | 53 - org.apache.activemq.activemq-osgi - 5.14.0 | Failed to connect to [tcp://localhost:61616] after: 10 attempt(s) continuing to retry.
and I wonder from where this tcp://localhost:61616
is coming (while it should be tcp://fedora:61616
I have in the $KARAF_HOME/etc/org.fcrepo.camel.service.activemq.cfg
).
Yes, and you are also using a 4.7.0-SNAPSHOT version of fcrepo-camel-toolbox, which is not suitable for what you are trying to do.
Here is what you should do:
1) stop karaf
2) remove the entire $KARAF_HOME/data
directory
3) Edit the file $KARAF_HOME/etc/org.apache.karaf.features.cfg
so that it contains these features:
featuresRepositories = \
..., \
mvn:org.apache.activemq/activemq-karaf/5.14.0/xml/features, \
mvn:org.apache.camel.karaf/apache-camel/2.17.3/xml/features, \
mvn:org.fcrepo.camel/fcrepo-camel/4.4.3/xml/features, \
mvn:org.fcrepo.camel/toolbox-features/4.6.2/xml/features
featuresBoot = \
..., \
fcrepo-service-camel, \
fcrepo-service-activemq, \
fcrepo-indexing-triplestore, \
fcrepo-reindexing
4) restart karaf
In the future, upgrading these features will require only stopping karaf, editing that file with the updated versions, removing the data directory, and starting karaf.
I followed your instruction. features:list | grep fcrepo
gives me:
fcrepo-camel | 4.4.3 | | Started | fcrepo-camel-4.4.3 |
fcrepo-indexing-solr | 4.6.2 | | Uninstalled | toolbox-features-4.6.2 |
fcrepo-fixity | 4.6.2 | | Uninstalled | toolbox-features-4.6.2 |
fcrepo-indexing-triplestore | 4.6.2 | x | Started | toolbox-features-4.6.2 |
fcrepo-reindexing | 4.6.2 | x | Started | toolbox-features-4.6.2 |
fcrepo-audit-triplestore | 4.6.2 | | Uninstalled | toolbox-features-4.6.2 |
fcrepo-ldpath | 4.6.2 | | Uninstalled | toolbox-features-4.6.2 |
fcrepo-service-ldcache-file | 4.6.2 | | Uninstalled | toolbox-features-4.6.2 |
fcrepo-marmotta-osgi | 4.6.2 | | Uninstalled | toolbox-features-4.6.2 |
fcrepo-serialization | 4.6.2 | | Uninstalled | toolbox-features-4.6.2 |
fcrepo-service-activemq | 4.6.2 | x | Started | toolbox-features-4.6.2 |
fcrepo-service-camel | 4.6.2 | x | Started | toolbox-features-4.6.2 |
and for features:list | grep activemq
I get:
activemq-broker-noweb | 5.14.0 | | Uninstalled | activemq-5.14.0 | Full ActiveMQ broker with default configuration
activemq-broker | 5.14.0 | | Uninstalled | activemq-5.14.0 | Full ActiveMQ broker with default configuration a
activemq-camel | 5.14.0 | | Started | activemq-5.14.0 |
activemq-web-console | 5.14.0 | | Uninstalled | activemq-5.14.0 |
activemq-blueprint | 5.14.0 | | Uninstalled | activemq-5.14.0 |
activemq-client | 5.14.0 | | Started | activemq-core-5.14.0 | ActiveMQ client libraries
activemq-cf | 5.14.0 | | Uninstalled | activemq-core-5.14.0 | ActiveMQ ConnectionFactory from config
activemq | 5.14.0 | | Uninstalled | activemq-core-5.14.0 | ActiveMQ broker libraries
Anyway nothing changed. I am still getting
2016-12-06 10:41:36,946 | INFO | tp1477667022-698 | ReindexingRouter | 135 - org.fcrepo.camel.fcrepo-reindexing - 4.6.2 | Initial indexing path:
2016-12-06 10:41:42,125 | WARN | ActiveMQ Task-1 | FailoverTransport | 24 - org.apache.activemq.activemq-osgi - 5.14.0 | Failed to connect to [tcp://localhost:61616] after: 10 attempt(s) continuing to retry.
just after triggering the reindex with a POST request. These two messages are the only ones displayed in the Karaf log after triggering reindex.
A little more evidence:
error.maxRedeliveries
settng in the org.fcrepo.camel.reindexing.cfg
- it always says after: 10 attempt(s)
no matter what is set up in the error.maxRedeliveries
jms.brokerUrl
setting of the org.fcrepo.camel.service.activemq.cfg
as turning of the Fedora (and its ActiveMQ service) leads to errors like:
2016-12-06 10:49:03,482 | WARN | lestore.reindex] | faultJmsMessageListenerContainer | 103 - org.apache.servicemix.bundles.spring-jms - 3.2.17.RELEASE_1 | Setup of JMS message listener invoker failed for destination 'triplestore.reindex' - trying to recover. Cause: The Consumer is closed
2016-12-06 10:49:03,483 | WARN | Consumer[fedora] | faultJmsMessageListenerContainer | 103 - org.apache.servicemix.bundles.spring-jms - 3.2.17.RELEASE_1 | Setup of JMS message listener invoker failed for destination 'fedora' - trying to recover. Cause: The Consumer is closed
2016-12-06 10:49:03,483 | WARN | umer[reindexing] | faultJmsMessageListenerContainer | 103 - org.apache.servicemix.bundles.spring-jms - 3.2.17.RELEASE_1 | Setup of JMS message listener invoker failed for destination 'reindexing' - trying to recover. Cause: The Session is closed
followed by (quite obvious):
2016-12-06 10:49:03,490 | ERROR | Consumer[fedora] | faultJmsMessageListenerContainer | 103 - org.apache.servicemix.bundles.spring-jms - 3.2.17.RELEASE_1 | Could not refresh JMS Connection for destination 'fedora' - retrying in 5000 ms. Cause: Error while attempting to retrieve a connection from the pool; nested exception is javax.jms.JMSException: Could not connect to broker URL: tcp://fedora:61616. Reason: java.net.ConnectException: Connection refused (Connection refused)
This is either a configuration error or a networking error. Either way, it is particular to your environment.
From an earlier post, you mentioned that you have this line in $KARAF_HOME/etc/org.fcrepo.camel.reindexing.cfg
:
reindexing.stream=broker:queue:triplestore.reindex
That is wrong; it should be:
reindexing.stream=broker:queue:reindexing
(or at least it should be any value except what you have).
Alternately, if this is a networking issue, I would recommend debugging it with telnet, such as is described here: https://access.redhat.com/documentation/en-US/Fuse_Message_Broker/5.4/html/Connectivity_Guide/files/BHIJBDJH.html
It seems to me that the reindexing plugin tries to connect to the ActiveMQ using a hardcoded address
tcp://localhost:61616
.I have
jms.brokerUrl=tcp://fedora:61616
set in theorg.fcrepo.camel.service.activemq.cfg
and it is honored by the fcrepo-indexing-triplestore plugin but not by the reindexing plugin.When I trigger reindex, I am getting in the Karaf log:
I also can not see any reindexing plugin configuration property allowing me to define ActiveMQ on the other server. Is there a way to do so?