Does CloudBees offer any JMS hosting or any 3rd party JMS hosting (like IronMQ)? After perusing their Partner Ecosystem pages and developers docs, I don't see anything of the sort. I'd like to deploy a web app to CloudBees but will need messaging, and something like RabbitMQ or ActiveMQ.
I know I could always ship my WAR with an embedded instance of ActiveMQ running inside of it, but that kind of defeats the purpose of scalability in my mind: the harder the queues are working, the slower my app is going to become, and it would be nice to delegate the messaging work to a broker residing on another machine.
Also, it would be most sweet if such a messaging service had a free tier like so many of the other CloudBees tech partners offer...
Any ideas? Thanks in advance!
There is no official partner (yet) to provide messaging service, but you for sure can use a SaaS MQ service from your cloudbees application, even not being an official partner, for sample http://www.cloudamqp.com/ to get RabbitMQ -as-a-service, Iron.io or Amazon SQS. The only consideration is to ensure this service is hosted on Amazon, so your application won't suffer network latencies to access the MQ broker - most SaaS run on AWS anyway
free tier option is another consideration, depends on partner business model... (CloudAMQP has one)
Related
I have two spring boot apps running in the same local network and they need to communicate with each other. An obvious answer is to leverage REST API and make http calls, but I would like to use Spring Integration project for this purpose.
That said, I have several architectural questions regarding that:
Should I setup a standalone messaging framework (e.g. Rabbit MQ) or embedded should also work (e.g. messaging will be embedded to one of the two apps).
If standalone, what messaging framework should I choose: ActiveMQ, RabbitMQ or something else?
Welcome to the Messaging Microservices world!
You go right way, but forget the embedded middleware if you are going to production. Especially when your application will be distributed geographically.
So, right you need some Message Broker and that should be definitely external one.
It's really your choice which one is better for your purpose. For example you can even take into account Apache Kafka or Redis.
If we talk here about Spring Integration it might be better for you to consider to use our new product - Spring Cloud Stream.
With that you just have your applications as Spring Boot Microservices which are able to connect to the external middleware transparently for the application. You just deal with message channels in the application!
From a systems integration perspective, is it common practice to use ESB (enterprise service bus) middleware technologies over EJB for mid-to-large sized applications, or is the use of ESB middleware mainly reserved for BPM (business process management) applications?
ESB is mainly used as an integration layer for the purposes of enabling integration of systems talking different message formats, for proxying, routing, message transformation, load balancing, talk different protocols etc. some or all of the above or much more.
An esb may be a full fledged commercial/open source system or just a proxy or router application, which could be implemented using ejb if required.
To comment on ESB and EJB, they are not related and they serve different purposes.
BPM usually involves message orchestration, interaction among different services, message formats and systems and as such an esb tends to come into picture for the purposes of integration. To comment on your point, ESB is neither reserved nor mandatory for BPM.
In my humble opinion, ESB is not just for BPM.
Using ESB allows you to create a distributed architecture.
Benefits of distributed architecture are well known (for example - scalability).
Of course, ESB is not the only solution out there to achieve this,but one of the solutions available.
Pay attention that if you need a distributed architecture , which does not have lots of services + differentiation of protocols (i.e - usage of HTTP, JMS, and more...) you should consider another solution.
ESB can help you when you have many services, which use different protocols (for example, imagine a component that accepts, and another component listening on JMS queue - you might need to send a message which is "logically" the same, but should be once said to the first service, and later on should be sent to the second service - an ESB will help you to perform this task).
I would recommend you to read more on this subject at this blog.
I'm looking for a message queue as a service that ..
.. is hosted in AWS us-east
.. offers real PubSub (not polling!)
.. can be used in production
.. offers high availability
.. has a good client for Java
I only found CloudAMQP (still in beta), AppEngine Task Queue (not AWS), SQS (polling only), Redis To Go (no high availability? -twitter stream seems full of issues) and IronMQ (polling only).
What am I missing?
You should check one of the open PaaS available (Such as Cloudify, OpenShift or Cloudfoundry), using such PaaS one can easily on board most of the services and most of the popular message queues like - ActiveMQ, RabitMQ or SonicMQ.
Cloudify (Which I'm one of its contributor) is open source and free, can on board lamosy any message queue you want on any cloud.
You can easily on board ActiveMQ, RabitMQ, SonicMQ or another service you used to work with off the cloud.
Looks like Iron.io have added pub/sub. Maybe it fits your needs now? Also, it appears to talk beanstalkd, so you're potentially free to migrate easily to a self hosted solution at some point in the future (should you feel that urge!).
Have you tried pure messaging solutions? http://www.pubnub.com/faq or http://pusher.com ? According to their websites they have presence on EC2.
Why do we need Application Server in Java like JBoss or WebSphere. Is it possible that we develop large scale website only with Java (Apache Tomcat). Where thousand of user connect on site at a moment. An example is a website like b2b.
What is the cost of a Application Server? I will be thankful if you compare price among different application server and if there is any free version kindly highlight it.
Application Servers are mostly used if you want to use advanced features like transaction management, hot code swapping and advanced persistence.
There are application servers that are open source. E.g. GlassFish and JBoss.
I don't think you need an application server for building a popular web site, you'll also be fine with a servlet container like Tomcat or Jetty.
In short Application Servers provide you with few services like
Transaction Management
Load Balancing
Security
Threading
etc.
You have to take care of these things yourself in a Web Server.
There are few Open Source Application servers which are free of cost.
I have used Glassfish.
Apart from answers given above, App Servers are required for EJBs.
You need Application Server as follow:
It provides you useful services like automatic transaction,Authentication,Authorization,Lifecycle management.
To remember large user data across pages using ejb's pertaining to a client.
Load balance the user request and buisness logic.
To interact with different Client UI like Java Swing,Browsers.
It is possible to handle the httpheaders yourself. We have done socket servers in java for 20 years. You do not need a container for java swing.
Persistence can be done through databases or server side files unless you need real high speed stuff. I have yet to find a real requirement for an ejb
except that some systems simply require them
This may be because jboss can provide better after-sales service, and jboss, etc. can provide operation and maintenance support, etc. This may be the reason why many large companies choose commercial versions of servers.
But you must know that tomcat and netty are not bad. For example, many large B2B or C2C or B2C companies still use tomcat, such as Internet companies such as Alibaba.
Choose a server
Operation and maintenance costs
Scalable costs
Server cost
In a very popular ecommerce store, I'd imagine the actual processing of the credit card would be moved to some sort of dedicated application server, and made into more of a asynchronous process.
What sort of java application type would that be? i.e. a service that would take a message of the queue, and start processing the request and update some db table once finished.
In .net, I guess one would use a windows service. What would you use in the java world?
It is typically a J2EE application that uses a HTTP web service interface or a JMS messaging interface. HTTP interfaces are accessible via a URL, and JMS connects to a queue to pick up messages that are sent to it. The app can run on any one of the major commercial (WebSphere, Weblogic, Oracle) or free (Glassfish, JBoss) servers.
In Java you already have great open source projects that do all this for you like Glassfish, Tomcat etc.
For a mission critical system, you might want something like IBM MQ series as the middleware, and a straight Java application that uses the MQ interface to process the requests.
At a few banks that I know of, this is their architecture. Originally the application servers were written in C, as was the middleware. They were able to switch to java because the code that was actually doing the critical work (sending and receiving messages, assuring guaranteed delivery, protecting against interruptions if a component went down) were the IBM MQ's.
In our case we use an application server from Sybase that can house Java components. They are pretty much standard Java classes that have public methods that are exposed for calling via CORBA. Components can also be scheduled to run constantly or on a schedule (like a service) to look for work to do (via items in a database table, an Oracle AQ queue, or a JMS queue). All of this is contained in the app server and the app server provides transaction management, resource management, and database connection pooling for us.
Or use an OSGI environment.