[ 
https://issues.apache.org/jira/browse/SLING-6745?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15948945#comment-15948945
 ] 

Ian Boston commented on SLING-6745:
-----------------------------------

The aim of SLING-5645 was to create an API that was compatible with 
sling.event.api, however it was discovered while doing that work and testing in 
a distributed environment that some features of the sling.event.api were 
created with a single instance in mind and therefore did not fit a distributed 
model. Once of those features was the ability to query event via the 
distributed API. Looking deeper into distributed event systems like RabbitMQ, 
AMQ etc the ability to randomly query the contents of an event queue is 
generally not supported. For that reason SLING-5645 dropped that feature and 
focused on what was supported. The API that was created is 2 layered. The outer 
layer has no dependencies on any other API standard. The Inner layer requires 
the JMS API and uses both Topic and Queue concepts.  Most messaging providers 
have Java clients that support the JMS API so this was considered to be a safe 
choice. For example, AWS SMS has a Java JMS Client library. 



For providers that do support JMS, all that is needed is this class 
{code}
@ProviderType
public interface ConnectionFactoryService {
    /**
     *
     * Get a connection factory.
     * @return the connection factory.
     */
    ConnectionFactory getConnectionFactory();
}
{code}
see 
https://github.com/apache/sling/blob/trunk/contrib/commons/mom/jms/src/main/java/org/apache/sling/jms/ConnectionFactoryService.java
for example ActiveMQ 
https://github.com/apache/sling/blob/trunk/contrib/commons/mom/jms/src/main/java/org/apache/sling/amq/ActiveMQConnectionFactoryService.java

If Kafka does not have a JMS Client then the following SPI needs to be 
implemented.

https://github.com/apache/sling/tree/trunk/contrib/commons/mom/api/src/main/java/org/apache/sling/mom

Provided Kafka has the concept of Topics and Quues then this is relatively 
trivial as in 

https://github.com/apache/sling/tree/trunk/contrib/commons/mom/jms/src/main/java/org/apache/sling/jms/impl

-------------------------

Obviously there is nothing to stop anyone reimplementing an alternative MoM API 
 in your own way as a competing implementation to address the current Sling API.

Although...

Wouldnt it be better to improve the MoM API and fix where it doesn't work ?

There are placeholders for the query operations.
https://github.com/apache/sling/blob/trunk/contrib/commons/mom/jobs/core/src/main/java/org/apache/sling/jobs/JobManager.java#L60

I had thought if these were required an independent service would subscribe to 
topics to maintain a list of active jobs. There is a topic for job status.


> kafka-based sling.event.api implementation
> ------------------------------------------
>
>                 Key: SLING-6745
>                 URL: https://issues.apache.org/jira/browse/SLING-6745
>             Project: Sling
>          Issue Type: New Feature
>            Reporter: Stefan Egli
>            Assignee: Stefan Egli
>
> In job handling to scale for larger deployment it is essential to be able to 
> execute a job outside of the local instance. This can be in another instance 
> in the same cluster (ie when ontop of documentMk) or outside of the cluster 
> (in AEM eg via 
> [offloading|https://docs.adobe.com/docs/en/aem/6-2/deploy/configuring/offloading.html]).
>  In both cases Sling Event (Resource) stores the job in the repository 
> (/var/eventing/jobs).
> It could be useful to have another variant of job execution that is managed 
> entirely outside of the repository. With SLING-5645 a new API was created to 
> support messaging-based implementations that would fit in this category as 
> they map a job to a (one or a few) message(s). 
> This new SLING-5645 Job-API is not entirely compatible with sling.event.api 
> though.
> This ticket is to track an effort to provide a messaging-based implementation 
> for sling.event.api - namely for Kafka. The goal is to become a drop-in 
> replacement of sling event without much need for change on the user side of 
> the sling.event.api.
> This might not right away become part of sling, but might start off in the 
> contrib section - to underscore that it's not something supported, at least 
> as of yet.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to