How to use Kong to make Orchestration Microservice API Gateway

Kong is an Orchestration Microservice API Gateway. Kong is an abstraction layer that manages client-microservice communication securely via APIs. It is sometimes called an API Gateway, API Middleware, or Service Mesh. In 2015, it became an open-source project, and its core values are high performance and extensibility.

Kong runs in Nginx as a Lua application and is enabled by Lua-Nginx-module.

Why use Kong?

If you need a common functionality to run your actual software on your website, mobile, or IoT (Internet of Things). Kong can work as a gateway (sidecar) for microservices requests, at the same time also possible to provide logging, load balancing, authentication, rate-limiting, transformations, and more through plugins.

Kong can work as a gateway (sidecar) for microservices requests

Kong also helps you to shorten development time, and support configurable plugins. It has many communities to support your development and make it stable.

Kong can add Security plugins for security layers such as ACL, CORS, Dynamic SSL, IP Restriction. It also has a useful traffic control plugin that has limited costs such as rate-limiting, request size limiting, response rate-limiting...

Support Analytics and monitoring plugin which can visualize, inspect, monitor traffic including Prometheus, data dog, and Runscope.

Support transforms requests and responses on the fly including Request Transformer, Response Transformer by Transformation plugin

Support logging request and response data using: TCP, UDP, HTTP, StatsD, Syslog, and others by Logging plugin

Here we will make a tutorial on how to set up and use KONG. You should refer to Docker and API REST for needed knowledge.

How to Install Kong Community Edition

Kong can work in multiple operating environments. The easiest installation is using docker. Follow the instruction below to install by docker.

Install KONG by docker

1. Create a docker network for Kong and API server

$ docker network create kong-net

2. Run a database. You can choose Postgres or Cassandra. We prioritize Postgres

$ docker run -d --name kong-database \
--network=kong-net \
-p 5555:5432 \
-e “POSTGRES_USER=kong” \
-e “POSTGRES_DB=kong” \
postgres:9.6

3. Run migration with Kong container after preparing a database

$ docker run --rm \
--network=kong-net \
-e “KONG_DATABASE=postgres” \
-e “KONG_PG_HOST=kong-database” \
kong:latest kong migrations up

4. After the migrations and database have been complete, start Kong container

$ docker run -d --name kong \
--network=kong-net \
-e “KONG_LOG_LEVEL=debug” \
-e “KONG_DATABASE=postgres” \
-e “KONG_PG_HOST=kong-database” \
-e “KONG_PROXY_ACCESS_LOG=/dev/stdout” \
-e “KONG_ADMIN_ACCESS_LOG=/dev/stdout” \
-e “KONG_PROXY_ERROR_LOG=/dev/stderr” \
-e “KONG_ADMIN_ERROR_LOG=/dev/stderr” \
-e “KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl” \
-p 9000:8000 \
-p 9443:8443 \
-p 9001:8001 \
-p 9444:8444 \
kong:latest

4. Using the request cmd to check Kong Instance

$ curl -i http://localhost:9001

The successful response is

HTTP/1.1 200 OK
Server: openresty/1.13.6.2
Date: Wed, 18 Jul 2018 03:58:57 GMT
Content-Type: application/json
Connection: keep-alive
Access-Control-Allow-Origin: *

Now Kong is run completely. The next task is that prepare an API server containing service routes and support REST API.

Use node.js to setup API server routing

In the task, we will use node.js for an API server. For simple, you 
can clone from GitHub faren-NodeJS-API-KONG. And it should contain like this in terminal:
Now prepare the API server, for this tutorial we are going to use node.js as an API server. To make it simple, please clone the code from GitHub faren-NodeJS-API-KONG. It should contain like below:
$ ls -l
total 48
-rw-r — r — 1 farendev staff 186 Jul 18 11:37 Dockerfile
-rw-r — r — @ 1 farendev staff 31716 Jul 16 10:36 Kong.postman_collection.json
-rw-r — r — 1 farendev staff 100 Jul 18 11:37 README.md
-rw-r — r — 1 farendev staff 878 Jul 18 11:37 index.js
-rw-r — r — 1 farendev staff 307 Jul 18 11:37 package.json

Let’s build a docker image and run it, by the cmd below:

$ docker build -t node_kong .
$ docker run -d --name=node_kong --network=kong-net node_kong

Check all docker has been run by cmd below:

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d13586f83e52 node_kong “npm start” 2 minutes ago Up 2 minutes 10000/tcp node_kong
41156cad5c86 kong:latest “/docker-entrypoint.…” 6 days ago Up 6 days 0.0.0.0:9000->8000/tcp, 0.0.0.0:9001->8001/tcp, 0.0.0.0:9443->8443/tcp, 0.0.0.0:9444->8444/tcp kong
f794a0e9506c postgres:9.6 “docker-entrypoint.s…” 6 days ago Up 6 days 0.0.0.0:5555->5432/tcp kong-database

Get an IP container on the docker network kong-net for checking API server by accessing its API. You can get into the container kong shell and check the API from it.

Execute the cmd bellow on your terminal:

$ docker network inspect kong-net
…
…
“Containers”: {
“41156cad5c864af4ad8615c051fac8da7f683238a6c8cc42267f02813f14810f”: {
“Name”: “kong”,
“EndpointID”: “fe1cec9f6f31a015ab29a100fdd54b609abea11bbfa00f5e9ca67cc6175d7b2f”,
“MacAddress”: “02:42:ac:13:00:03”,
“IPv4Address”: “172.19.0.3/16”,
“IPv6Address”: “”
},
“d13586f83e52df8866b9879ba0537d58c21fc1b95978dde0580b017ce1a7b418”: {
“Name”: “node_kong”,
“EndpointID”: “5677f7588b7daef391cf8cecec6a3ede0155f99f7d86e0e14dd5970ff0570924”,
“MacAddress”: “02:42:ac:13:00:04”,
“IPv4Address”: “172.169.0.5/16”,
“IPv6Address”: “”
},
“f794a0e9506c7330f1cc19c5c390f745823c29dd4603e0d727dae4e8a68caa8d”: {
“Name”: “kong-database”,
“EndpointID”: “51737ca4e2a4b0e30d25db86e197e653a81e6206893588f4dae7b4a0a50e2799”,
“MacAddress”: “02:42:ac:13:00:02”,
“IPv4Address”: “172.19.0.2/16”,
“IPv6Address”: “”
}
},
…

Check the IP on node_kong in bold font and execute curl the IP bellow exactly.

$ docker exec -ti kong sh
/ # curl -i 172.169.0.5:10000/api/v1/customers
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: application/json; charset=utf-8
Content-Length: 110
ETag: W/”6e-Tf3vAGLC3XH0dFR2pCIzWdG8/5c”
Date: Wed, 18 Jul 2018 10:09:32 GMT
Connection: keep-alive
[{“id”:5,”first_name”:”Dodol”,”last_name”:”Dargombez”},{“id”:6,”first_name”:”Nyongot”,”last_name”:”Gonzales”}]

The above respond shows that server API is alive, and can serve to GET method REST /API/v1/workers.

How to setup KONG as API – Gateway to API server routing

After completing the KONG engine and node.js API service, and starting registering our API to Kong, the image below shows the workflow.

Routes define rules to match client requests and work as entry points in Kong. When a route is matched, Kong proxies the request to its associated Service. The service will be direct to the API server that is ready to serve.

For example (Warning: IP might very different for every machine)

API server that is live on server http://172.169.0.5:10000/api/v1/customers

We set routes path /api/v1/customers

And set the service host to http://172.169.0.5:10000, and path /api/v1/customers

So, when the client request to kong (in this case kong is life at localhost:9000) with path route /api/v1/customer: incomplete client request http://localhost:9000/api/v1/customers , Kong will proxy it to 172.169.0.5:10000/api/v1/customers

To start please import postman collection file on GitHub NodeJS-API-KONG (https://github.com/faren/NodeJS-API-KONG) — kong.postman_collection.json.

So let’s see in practice take a look postman collection that has been imported:

For this tutorial, we should get the result like the above scenario:

REST for customers and clients.

Firstly, you register service customers and then register match routes requested. Let take a look at how to get node_kong IP from the docker network.

Find collection Kong, folder Services, POST Services — Create:

POST: localhost:9001/services/

Headers: Content-Type:application/json
Body:
{
“name”: “api-v1-customers”,
“url”: “http://172.169.0.5:10000/api/v1/customers"
}Respond:
{
“host”: “172.169.0.5”,
“created_at”: 1531989815,
“connect_timeout”: 60000,
“id”: “d28c20e4–94d3–4c3b-9a0d-688ac8dbf213”,
“protocol”: “http”,
“name”: “api-v1-customers”,
“read_timeout”: 60000,
“port”: 10000,
“path”: null,
“updated_at”: 1531989815,
“retries”: 5,
“write_timeout”: 60000
}

Find collection Kong, folder Services, GET Services — List:

GET: localhost:9001/services/

Respond:
{
“next”: null,
“data”: [
{
“host”: “172.169.0.5”,
“created_at”: 1531989815,
“connect_timeout”: 60000,
“id”: “d28c20e4–94d3–4c3b-9a0d-688ac8dbf213”,
“protocol”: “http”,
“name”: “api-v1-customers”,
“read_timeout”: 60000,
“port”: 10000,
“path”: null,
“updated_at”: 1531989815,
“retries”: 5,
“write_timeout”: 60000
}
]
}

After creating service customers, you can create routes for service customers.

Find collection Kong, folder Routes, POST Routes — Create:

POST: localhost:9001/services/api-v1-customers/routes/

Headers: Content-Type:application/json
Body:
{
“hosts”: [“api.ct.id”],
“paths”: [“/api/v1/customers”]
}Respond:
{
“created_at”: 1531991052,
“strip_path”: true,
“hosts”: [
“api.ct.id”
],
“preserve_host”: false,
“regex_priority”: 0,
“updated_at”: 1531991052,
“paths”: [
“/api/v1/customers”
],
“service”: {
“id”: “d28c20e4–94d3–4c3b-9a0d-688ac8dbf213”
},
“methods”: null,
“protocols”: [
“http”,
“https”
],
“id”: “4d9503c3-d826–43e3–9063-ed434a949173”
}

Find collection Kong, folder Routes, GET Routes -> List:

GET: localhost:9001/services/

Respond:
{
“next”: null,
“data”: [
{
“created_at”: 1531991052,
“strip_path”: true,
“hosts”: [
“api.ct.id”
],
“preserve_host”: false,
“regex_priority”: 0,
“updated_at”: 1531991052,
“paths”: [
“/api/v1/customers”
],
“service”: {
“id”: “d28c20e4–94d3–4c3b-9a0d-688ac8dbf213”
},
“methods”: null,
“protocols”: [
“http”,
“https”
],
“id”: “4d9503c3-d826–43e3–9063-ed434a949173”
}
]
}

Check you can access API customers from KONG (http://localhost:9000/api/v1/customers)

GET: localhost:9000/api/v1/customers

Headers: Host:api.ct.id
Respond:
[
{
“id”: 5,
“first_name”: “Dodol”,
“last_name”: “Dargombez”
},
{
“id”: 6,
“first_name”: “Nyongot”,
“last_name”: “Gonzales”
}
]

Conclusion

Kong is an open-source, scalable API Layer (API Gateway, or API Middleware), which runs in front of any RESTful API and is extended through Plugins. Kong can provide extra functionality and services beyond the core platform.

For better understanding, the image below shows a typical request workflow of an API using Kong:

When Kong is running, every request being made to the API will hit Kong first, and then it will be proxied to the final API. Kong can execute any plugin in between requests and responses. You can install many types of plugins to empower your APIs, Kong is also supported by plugins from authentication, security, traffic control, logging, and etc… Kong can be used effectively as entry points for every API request.

147 thoughts on “How to use Kong to make Orchestration Microservice API Gateway”

  1. Have you ever considered publishing an ebook or guest authoring on other sites?
    I have a blog centered on the same subjects you discuss
    and would really like to have you share some stories/information. I
    know my audience would value your work. If you are even remotely interested, feel free to send me an e mail.

  2. you are in reality a excellent webmaster. The web site loading pace is amazing. It sort of feels that you are doing any distinctive trick. Moreover, The contents are masterpiece. you have done a great process in this subject!

  3. I have been exploring for a little bit for any high-quality articles or
    blog posts on this sort of area . Exploring in Yahoo I eventually stumbled upon this
    web site. Studying this information So i’m satisfied to convey that I’ve an incredibly good uncanny feeling I discovered just what I needed.

    I such a lot certainly will make certain to do not fail to remember this site and give it a glance regularly.

  4. Asking questions are in fact good thing if you are not understandingsomething entirely, however this piece of writingpresents nice understanding even.

  5. I used to be recommended this website via my cousin. I am not certain whether or not this submit is written through him
    as no one else know such certain about my problem. You are
    amazing! Thank you!

  6. Definitely believe that which you said. Your favorite justification appeared to be on the net the simplest thing to be aware of.
    I say to you, I certainly get annoyed while people think about worries that they plainly do not know about.

    You managed to hit the nail upon the top and defined out the whole thing without having side effect , people could take
    a signal. Will probably be back to get more. Thanks

  7. whoah this blog is wonderful i love studyingyour articles. Keep up the great work! You realize, lots of individuals are searching round forthis info, you could help them greatly.

  8. Everything is very open with a really clear description of the issues.
    It was definitely informative. Your website is extremely helpful.
    Thanks for sharing!

  9. I am not sure where you’re getting your info,
    but great topic. I needs to spend some time learning much
    more or understanding more. Thanks for excellent info I was looking for this info for my mission.

  10. This is very interesting, You’re a very skilled blogger.I’ve joined your rss feed and look forward to seeking more of your magnificent post.Also, I’ve shared your website in my social networks!

  11. I have been surfing on-line more than three hours as of late, yet I by no means discovered any fascinating article like yours.
    It is pretty value sufficient for me. In my opinion, if all site owners and
    bloggers made just right content as you did, the internet might be much
    more useful than ever before.

  12. Hi, Neat post. There is a problem along with your site in web explorer,
    could check this? IE nonetheless is the market chief and a large section of other
    people will leave out your magnificent writing due to this problem.

  13. Hi my friend! I wish to say that this post is amazing,
    nice written and include approximately all significant infos.

    I would like to see extra posts like this .

  14. When I originally commented I clicked the “Notify me when new comments are added” checkbox and now each time a
    comment is added I get three e-mails with
    the same comment. Is there any way you can remove
    people from that service? Thanks!

  15. Wow, incredible weblog structure! How long have
    you been running a blog for? you make running a blog glance easy.

    The entire glance of your web site is fantastic, as well as the content!

  16. I’m truly enjoying the design and layout of your blog. It’s a very easy on the eyes which makes it much more pleasant for me to come here and visit more often. Did you hire out a designer to create your theme? Superb work!

  17. It’s the best time to make some plans for the long run and it’s time to be happy.
    I have learn this submit and if I may just I want to recommend you few attention-grabbing issues
    or suggestions. Maybe you can write subsequent articles referring to this article.
    I desire to learn even more issues about it!

  18. I will right away take hold of your rss feed as I can’t to find your e-mail subscription hyperlink or e-newsletter service. Do you have any? Kindly permit me recognise so that I could subscribe. Thanks.

  19. There are certainly a lot of details that adheres to that to think about. Which is a excellent specify raise up. I offer the thoughts above as general inspiration but clearly there are actually questions like the one you start up where most critical thing will be in honest very good faith. I don?t know if best practices have emerged around such thinggs as that, but Almost certainly that the job is clearly defined as a reasonable game. Both children have the impact of merely a moment’s pleasure, through out their lives.

  20. I got what you intend, thanks for posting .Woh I am glad to find this website through google. “Being intelligent is not a felony, but most societies evaluate it as at least a misdemeanor.” by Lazarus Long.

  21. Hi I am so delighted I found your blog page, I really found you by mistake, while I was searching on Askjeeve for something else, Anyways I am here now and would just like to say thank you for a marvelous post and a all round exciting blog (I also love the theme/design), I don’t have time to look over it all at the minute but I have saved it and also added your RSS feeds, so when I have time I will be back to read a lot more, Please do keep up the great work.

  22. Youre so cool! I dont suppose Ive read anything similar to this prior to. So nice to locate somebody with a few original applying for grants this subject. realy thanks for starting this up. this fabulous website are some things that is needed online, an individual with a bit of originality. beneficial project for bringing something new to the net!

  23. Terrific paintings! That is the kind of info that are meant to be shared across the web. Shame on search engines for no longer positioning this post higher! Come on over and discuss with my website . Thank you =)

  24. Heya! I just wanted to ask if you ever have any trouble with hackers? My last blog (wordpress) was hacked and I ended up losing several weeks of hard work due to no data backup. Do you have any solutions to prevent hackers?

  25. The next time I learn a weblog, I hope that it doesnt disappoint me as much as this one. I mean, I do know it was my choice to read, but I actually thought youd have one thing fascinating to say. All I hear is a bunch of whining about something that you possibly can repair in case you werent too busy looking for attention.

  26. Howdy this is somewhat of off topic but I was wanting to know if blogs use WYSIWYG editors or if you have to manually code with HTML. I’m starting a blog soon but have no coding knowledge so I wanted to get guidance from someone with experience. Any help would be greatly appreciated!

  27. Great beat ! I would like to apprentice while you amend your web site, how could i subscribe for a blog site? The account aided me a acceptable deal. I had been a little bit acquainted of this your broadcast provided bright clear concept

  28. naturally like your website but you have to test the spelling on several of your posts. Several of them are rife with spelling problems and I find it very troublesome to inform the reality on the other hand I will surely come again again.

  29. Attractive section of content. I just stumbled upon your web site and in accession capital to assert that I get actually enjoyed account your blog posts. Anyway I will be subscribing to your feeds and even I achievement you access consistently rapidly.

  30. I think this is among the so much significant info for me. And i am satisfied studying your article. But wanna remark on few basic things, The site style is great, the articles is truly great : D. Just right task, cheers

  31. I would like to thnkx for the efforts you’ve put in writing this blog. I am hoping the same high-grade blog post from you in the upcoming as well. Actually your creative writing skills has encouraged me to get my own web site now. Actually the blogging is spreading its wings quickly. Your write up is a good example of it.

  32. Hmm it seems like your site ate my first comment (it was extremely long) so I guess I’ll just sum it up what I wrote and say, I’m thoroughly enjoying your blog. I as well am an aspiring blog writer but I’m still new to everything. Do you have any suggestions for novice blog writers? I’d really appreciate it.

  33. Hello, Neat post. There is a problem along with your web site in web explorer, would check thisK IE nonetheless is the market chief and a huge component to other folks will omit your excellent writing because of this problem.

  34. Hello, Neat post. There is a problem along with your website in internet explorer, might check this… IE still is the marketplace chief and a huge part of people will pass over your fantastic writing because of this problem.

  35. Normally I don’t read article on blogs, but I would like to say that this write-up very compelled me to try and do it! Your writing style has been surprised me. Thank you, quite great article.

  36. Good post. I study one thing more challenging on completely different blogs everyday. It’ll always be stimulating to read content from different writers and follow a bit one thing from their store. I’d favor to use some with the content on my blog whether you don’t mind. Natually I’ll give you a hyperlink in your internet blog. Thanks for sharing.

  37. What’s Taking place i’m new to this, I stumbled upon this I have discovered It positively useful and it has aided me out loads. I hope to give a contribution & aid other customers like its helped me. Great job.

  38. hello there and thank you for your information – I have definitely picked up anything new from right here. I did however expertise a few technical points using this website, as I experienced to reload the web site lots of times previous to I could get it to load properly. I had been wondering if your web hosting is OK? Not that I am complaining, but slow loading instances times will often affect your placement in google and can damage your high quality score if ads and marketing with Adwords. Well I am adding this RSS to my email and could look out for much more of your respective intriguing content. Make sure you update this again soon..

  39. Pretty component of content. I simply stumbled upon your blog and in accession capital to assert that I get actually loved account your weblog posts. Any way I’ll be subscribing on your feeds and even I achievement you get admission to constantly quickly.

  40. Hey, you used to write excellent, but the last few posts have been kinda boringK I miss your tremendous writings. Past several posts are just a little out of track! come on!

  41. Hello my friend! I want to say that this article is awesome, great written and include approximately all significant infos. I’d like to peer more posts like this .

  42. naturally like your web-site but you have to test the spelling on quite a few of your posts. Several of them are rife with spelling issues and I to find it very troublesome to tell the reality nevertheless I will definitely come again again.

  43. hello there and thanks to your info – I’ve definitely picked up anything new from proper here. I did alternatively experience several technical points the use of this web site, since I experienced to reload the web site lots of instances previous to I could get it to load correctly. I have been thinking about if your web host is OK? Not that I’m complaining, however sluggish loading cases instances will very frequently have an effect on your placement in google and could injury your quality rating if ads and ***********|advertising|advertising|advertising and *********** with Adwords. Well I’m adding this RSS to my email and could look out for much more of your respective intriguing content. Make sure you replace this once more soon..

  44. Thank you for the sensible critique. Me and my neighbor were just preparing to do a little research about this. We got a grab a book from our area library but I think I learned more clear from this post. I am very glad to see such magnificent information being shared freely out there.

  45. I’d have to examine with you here. Which is not one thing I usually do! I take pleasure in reading a post that may make folks think. Additionally, thanks for permitting me to comment!

  46. I think this is among the most significant information for me. And i am glad reading your article. But want to remark on some general things, The site style is perfect, the articles is really nice : D. Good job, cheers

  47. Hey there would you mind letting me know which webhost you’re working with? I’ve loaded your blog in 3 completely different browsers and I must say this blog loads a lot quicker then most. Can you recommend a good internet hosting provider at a honest price? Thanks, I appreciate it!

  48. Hello, I think your blog might be having browser compatibility issues. When I look at your website in Safari, it looks fine but when opening in Internet Explorer, it has some overlapping. I just wanted to give you a quick heads up! Other then that, very good blog!

  49. Attractive part of content. I simply stumbled upon your site and in accession capital to assert that I get in fact loved account your weblog posts. Anyway I will be subscribing in your feeds and even I achievement you access constantly fast.

  50. I like what you guys are up also. Such clever work and reporting! Carry on the superb works guys I’ve incorporated you guys to my blogroll. I think it will improve the value of my website :).

  51. I was just looking for this info for some time. After 6 hours of continuous Googleing, at last I got it in your web site. I wonder what is the lack of Google strategy that don’t rank this kind of informative websites in top of the list. Normally the top web sites are full of garbage.

  52. I was just searching for this info for a while. After 6 hours of continuous Googleing, at last I got it in your site. I wonder what’s the lack of Google strategy that don’t rank this kind of informative web sites in top of the list. Normally the top websites are full of garbage.

  53. Aw, this was a very nice post. In idea I wish to put in writing like this additionally – taking time and actual effort to make a very good article… however what can I say… I procrastinate alot and not at all appear to get one thing done.

  54. I was just searching for this info for some time. After 6 hours of continuous Googleing, finally I got it in your site. I wonder what is the lack of Google strategy that do not rank this type of informative websites in top of the list. Usually the top websites are full of garbage.

  55. magnificent put up, very informative. I ponder why the other experts of this sector don’t notice this. You should continue your writing. I’m sure, you have a huge readers’ base already!

  56. Good ?V I should certainly pronounce, impressed with your web site. I had no trouble navigating through all tabs as well as related info ended up being truly simple to do to access. I recently found what I hoped for before you know it at all. Reasonably unusual. Is likely to appreciate it for those who add forums or anything, site theme . a tones way for your customer to communicate. Excellent task..

  57. Thank you for some other informative blog. The place else could I am getting that type of info written in such an ideal way? I’ve a mission that I am simply now running on, and I have been on the glance out for such information.

  58. Thanks for all your valuable labor on this web site. Ellie really likes doing investigations and it’s easy to see why. Many of us notice all of the lively mode you convey informative guides via the blog and even invigorate participation from other ones on the area so our favorite child has always been learning a great deal. Have fun with the remaining portion of the year. Your performing a really great job.

  59. I must show my gratitude for your kind-heartedness for those individuals that should have help with your idea. Your special commitment to passing the message along ended up being exceedingly helpful and have continuously enabled guys just like me to reach their dreams. This warm and helpful publication can mean a great deal to me and a whole lot more to my colleagues. Best wishes; from each one of us.

  60. Good write-up, I am normal visitor of one?¦s blog, maintain up the nice operate, and It’s going to be a regular visitor for a lengthy time.

  61. I’m still learning from you, but I’m making my way to the top as well. I certainly enjoy reading everything that is written on your site.Keep the aarticles coming. I liked it!

  62. Hello, Neat post. There’s an issue along with your website in internet explorer, would test this… IE still is the marketplace leader and a large component to folks will miss your fantastic writing because of this problem.

  63. Hello! I could have sworn I’ve been to this blog before but after browsing through some of the post I realized it’s new to me. Anyways, I’m definitely happy I found it and I’ll be book-marking and checking back frequently!

  64. Thank you for some other great article. The place else could anyone get that type of info in such an ideal method of writing? I have a presentation subsequent week, and I’m on the search for such information.

  65. I do agree with all of the ideas you have presented in your post. They’re very convincing and will definitely work. Still, the posts are too short for starters. Could you please extend them a little from next time? Thanks for the post.

  66. I just couldn’t depart your web site before suggesting that I extremely enjoyed the standard information a person provide for your visitors? Is gonna be back often in order to check up on new posts

  67. There are some interesting deadlines on this article but I don’t know if I see all of them middle to heart. There is some validity but I’ll take maintain opinion till I look into it further. Good article , thanks and we wish extra! Added to FeedBurner as properly

  68. I’ve recently started a blog, the info you offer on this web site has helped me greatly. Thanks for all of your time & work. “There is a time for many words, and there is also a time for sleep.” by Homer.

  69. My wife and i were absolutely thrilled that Louis could finish off his basic research through the entire precious recommendations he grabbed out of the site. It’s not at all simplistic just to possibly be releasing guidelines that others may have been trying to sell. And we also see we have the blog owner to appreciate for this. These illustrations you have made, the simple blog navigation, the friendships you will make it possible to foster – it’s got all fabulous, and it is helping our son in addition to our family consider that the matter is thrilling, and that is highly serious. Many thanks for the whole thing!

Leave a Reply

Your email address will not be published. Required fields are marked *