Message queue with read lock - message-queue

I'm looking and researching for message queues (MQ) that have read-lock or peek-lock feature. However, I couldn't yet found any options except Azure Service Bus.
Could anyone shares possible alternatives of MQ with similar peek-lock?
Thanks

Azure Storage Queues is another alternative on Azure where message can be locked by a reader. Outside of Azure you have variety of MQ options.

Related

what is the difference between MQ and MQTT?

I am beginner to MQTT , but what is confusing me is it's basic definition
MQTT is a publish-subscribe based "light weight" messaging protocol'.
Based on my previous understanding on MQ (Message Queue), both MQ and MQTT sounds very same to me. Can any one elaborate what the real difference between MQ and MQTT is and their use case? Thanks!!
MQTT was initially called "Message Queue Telemetry Transport". You can find an in-depth explanation how it evolved here: http://www.hivemq.com/mqtt-essentials-part-1-introducing-mqtt/
MQTT is a protocol, it is open source. A lot of vendors are using this protocol for messaging.
MQ is an over-arching team that just means messaging. There are lot of different protocols, AMQP is one of them as well.
Additionally, IBM had a product called MQ.
MQTT is an OASIS standard protocol that is not only used for MQ messaging but it can also be used for the Internet of Things IOT and M2M (machine to machine) communication.
Here is a slide presentation that you may find useful.

CouchBase WEB(AngularJS), Android(Native), IOS(Native)

I'm planning to build an application that runs on WEB(AngularJS), Android(Native), IOS(Native).
I have experience with MongoDB, but I found CouchBase which sounds really good for me.
I read documentation and I found out I need to use sync_gatway to sync my mobile databases with main database server and reverse, until now everything is fine.
I also need to use "channels" to share records with multiple users.
The problem comes when I need to implement this for web application.
In their documentation on "Working with web applications" they explain how "bucket shadowing" is working, but they also say:
Bucket shadowing is meant to enable sync for existing Couchbase Server
apps. If you are creating a new app with both mobile and web clients,
we recommend starting with the Sync Gateway REST APIs, and connecting
backend services using the Changes Worker Pattern.
After reading Sync Gateway REST API I found out I'm limited to facebook and persona authentication. So I can't use my own authentication mechanism?
Also, there is nothing specified in REST API about channels?
Is there any example project or more documentation about this? I couldn't find anything :(
If someone has experience with this, please explain how this works.
Thanks
There is also Custom (Indirect) Authentication available on Sync Gateway, which you can use for any type of auth you need.
But you have to hide Sync Gateway's Admin API under your backend layer.
As for the channels: it is responsibility of Sync Function to route different documents to necessary channels based on Document data.
Here is a good video that describes how to build production architecture around Couchbase Lite.
I'm probably late for the party - but as of today I'd recommend taking a look in the PouchDB project for the WEB AngularJS side - they match pretty well and will sync with Couchbase.
Regarding authentication, I just released an article on that topic, find it here. Hope this helps somebody

Do any MQ servers support fail/retry?

We are in need of a queuing solution for one of my team's apps. Ideally we'd like the message consumers to pull a message, process it, but place it back on the queue if processing failed for whatever reason (so that it can be retried a few minutes later). Are there any MQ servers out there that support this workflow?
Any JMS compliant messaging provider should do this. Some also provide this functionality in a native API. For example, WebSphere MQ has both local units of work and global (XA) units of work through JTA and a native API. Some technologies hide this from you. For example, depending on your settings, the JMS classes may "auto-acknowledge" messages by committing them.
If you wish to try WebSphere MQ, the server is available through the Trial Download and is a paid license after the trial. However, the clients are free and the server can handle thousands of simultaneous clients and hundreds to tens of thousands of messages per second, depending on the server class. The documentation is available free and without registration here.

Alternative to MSMQ

I need to write a queuing system and I'd like to know what alternatives are there for queuing messages around Microsoft servers to MSMQ?
I know a little about MS-DTC and BizTalk but what are the pros and cons of these options and am I missing anything?
I need In-Order message delivery and potentially the ability to scale horizontally.
I'm dealing with upto around 100,000 messages an hour of less than 256kb per message.
Thanks
RabbitMQ is really good. Also search for AMQP. That stands for Advanced Message Queueing Protocol. It's an open standard for message queues. RabbitMQ is an implementation of AMQP.
MS-DTC has nothing to do with queuing, it is the Distributed Transaction Cordinator, and MSMQ can enlist in a Distributed Transaction to ensure reliable message delivery.
The issue with Biztalk IMHO, is the additional cost and complexity of having to support a biztalk server. If all you want is queuing then Biztalk might be overkill. A big seller of biztalk is the tools it provides for integrating various systems together.
What is wrong with MSMQ? You could easily handle that load, and I believe MSMQ can scale out when running in Active Directory.
You could also look at other vendors IBM's MQ Series (Which I would advise against if your in a microsoft environment), Rhino Queues is another one I am vaguley familiar with.

Good examples of applications using Message Queues

I would like to learn more about programming messaging applications and using message queues. Things like qpid, Amazon Queues, etc. Can you point me to some apps (preferably C++, open source if possible) so I can learn more.
Also, can you tell me the general guidelines one would use to decide whether ot not to use message queues. I am interesting in leanring about this just for the 'coolness' factor but I think it might be beneficial for me in the future.
RabbitMQ is the Message Queue that I am the most familiar with. It implements AMQP just like qpid. AMQP is a widely accepted wire protocol and there are many client libraries available such as C++, Java, Ruby, .Net, Python, etc.
If the distributed service is flaky and is not always online, you can use a rock solid message queue to persist the messages. The messages are then delivered when the distributed service comes back to life.
If the distributed service has low latency and the client service generates more requests than the distributed service can handle, a queue will hold the messages until the distributed service can process them while allowing the client to process uninhibited.
If requests need to be distributed to multiple services, an exchange will take care the important details such as delivering the message to each distributed service once and only once.
I don't recommend using message queues when you need a synchronous call to a remote service. Message queues are inherently asynchronous.
Not a programming language, but a useful tool when you're programming with message queues is Promela/Spin. It's designed to identify deadlocks or other concurrency issues that might arise from a distributed system. Certainly looking at the sort of issues it can help identify will give you an idea of the sort of problems you might encounter.
Not sure what its written in but Eclipse IDE seems to have some sort of message queue system. Whenever its busy (read, lagging... alot) you see a message saying "performing blank before user operation". Eclipse is Open Source. I am not sure where to download the source code.. but I believe it comes with the installation - http://www.eclipse.org/downloads/. latest is 3.6 (helios)